1. 程式人生 > 程式設計 >python 實現埠掃描工具

python 實現埠掃描工具

# 簡單的埠掃描工具
# 作者: Charles
# 公眾號: Charles的皮卡丘
import time
import socket
import threading

# 判斷是否為正確的IP地址。
def isIP(ip):
  ip_addr = ip.split('.')
  if len(ip_addr) != 4:
   return False
  for ipnum in ip_addr:
   if not (0 <= int(ipnum) < 255):
     return False
  else:
   return True


# 埠掃描工具
class scanThread(threading.Thread):
  def __init__(self,ip,port_min=0,port_max=65535):
   # 初始化。
   threading.Thread.__init__(self)
   self.port_max = port_max
   self.port_min = port_min
   self.ip = ip
   # assert isinstance(int,self.port_min) and isinstance(int,self.port_max)
  # 重寫run
  def run(self):
   return self.__checker()
  # 檢測
  def __checker(self):
   
   for port in range(self.port_min,self.port_max):
     self.__connect(port)
  # 連線
  def __connect(self,port):
   socket.setdefaulttimeout(1)
   self.sock = socket.socket()
   try:
     start_time = time.time()
     self.sock.connect((self.ip,port))
     end_time = time.time()
     connect_time = int(start_time - end_time)
     info = 'Find --> [IP]: %s,[PORT]: %s,[Connect Time]: %d' % (self.ip,port,connect_time)
     print(info)
     self.__save(info)
     self.sock.close()
   except:
     # print('出錯誤了')
     self.sock.close()
  def __save(self,info):
   try:
     with open('results.txt','a') as f:
      f.write(info + '\n')
   except:
     print('寫檔案出現了問題')
     time.sleep(0.1)

if __name__ == '__main__':
  # 輸入IP地址。
  ip = input('Input IP(example <xxx.xxx.xxx.xxx>):\n')
  print(isIP(ip))
  while not isIP(ip):
   ip = input('請輸入正確的IP地址:\n')
  # 輸入最小埠、
  port_min = input('需要掃描的最小埠為:')
  while not (0 <= int(port_min) < 65535):
   port_min = input('請輸入正確的需要掃描的最小埠:')
  port_max = input('需要掃描的最大埠為(65535):')
  while not (0 <= int(port_min) < int(port_max) < 65535):
   port_min = input('請輸入正確的需要掃描的最大埠(65535):')
  num = 8
  port_max = int(port_max)
  port_min = int(port_min)
  interval = (port_max - port_min) // num
  for i in range(interval):
   scanThread(ip,i * num,(i + 1) * num).start()

以上就是python 實現埠掃描工具的詳細內容,更多關於python 埠掃描工具的資料請關注我們其它相關文章!