資源簡介
使用Python實現的端口掃描,多線程,區間掃描,指定端口,端口區間
更多用法 -h 參數
代碼片段和文件信息
import?socket
import?threading
import?sys
import?re
class?Scanner(threading.Thread):
????def?__init__(self?target_url?target_port):
????????threading.Thread.__init__(self)
????????self.url?=?target_url
????????self.port?=?target_port
????def?run(self):
????????if?not?self.check():
????????????return
????????for?port?in?self.port:
????????????p?=?threading.Thread(target=self.port_scan?args=(port))
????????????p.start()
????def?check(self):
????????if?re.findall(r‘[a-zA-Z]‘?self.url):
????????????try:
????????????????ip?=?socket.gethostbyname(self.url)
????????????????print(‘\033[33m[>]?THE?IP?OF?%s?IS?%s\n\033[0m‘?%?(self.url?ip))
????????????except?socket.error?as?e:
????????????????print(‘\033[31m[!]?%s?NAME?ERROR!\033[0m‘?%?self.url)
????????????????return?False
????????else:
????????????n_list?=?self.url.split(‘.‘)
????????????for?n?in?n_list:
????????????????if?int(n)?>?255:
????????????????????print(‘\033[31m[!]?%s?IP?ERROR!\033[0m‘?%?self.url)
????????????????????return?False
????????return?True
????def?port_scan(self?port):
????????scanner?=?socket.socket(socket.AF_INET?socket.SOCK_STREAM)
????????scanner.settimeout(0.1)
????????try:
????????????result?=?scanner.connect_ex((self.url?port))
????????????if?result?==?0:
????????????????print(‘\033[32m[+]?%s?port?%d?is?open\033[0m‘?%?(self.url?port))
????????????else:
????????????????print(‘\033[34m[-]?%s?port?%d?is?closed\033[0m‘?%?(self.url?port))
????????except?socket.errno?as?e:
????????????print(‘\033[34m[-]?%s?port?%d?is?closed\033[0m‘?%?(self.url?port))
????????finally:
????????????scanner.close()
def?ip2num(ip):
????ip?=?[int(x)?for?x?in?ip.split(‘.‘)]
????return?ip[0]?<24?|?ip[1]?<16?|?ip[2]?<8?|?ip[3]
def?num2ip(num):
????return?‘%s.%s.%s.%s‘?%?((num?&?0xff000000)?>>?24?(num?&?0x00ff0000)?>>?16
????????????????????????????(num?&?0x0000ff00)?>>?8?num?&?0x000000ff)
def?generate_ip(ip1?ip2):
????return?[num2ip(num)?for?num?in?range(ip1?ip2+1)?if?num?&?0xff]
def?check(start?end):
????for?s?e?in?zip(start.split(‘.‘)?end.split(‘.‘)):
????????if?int(s)?>?255?or?int(e)?>?255:
????????????if?int(s)?>?255:
????????????????print(‘\033[31m[!]?%s?IP?ERROE!\033[0m‘?%?start)
????????????else:
????????????????print(‘\033[31m[!]?%s?IP?ERROE!\033[0m‘?%?end)
????????????return?False
????if
評論
共有 條評論