04端口掃描工具

# 簡單的端口掃描工具# 做者: Charles# 公衆號: Charles的皮卡丘import timeimport socketimport 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()
相關文章
相關標籤/搜索