1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
|
# 简单的端口扫描工具
# 作者: 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 端口扫描工具的资料请关注服务器之家其它相关文章!
原文链接:https://www.cnblogs.com/cong12586/p/14135468.html