本文实例讲述了python实现的多线程端口扫描功能。分享给大家供大家参考,具体如下:
下面的程序给出了对给定的ip主机进行多线程扫描的python代码
#!/usr/bin/env python
#encoding: utf-8
import socket, sys, thread, time
openportnum = 0
socket.setdefaulttimeout(3)
def usage():
print '''''usage:
scan the port of one ip: python port_scan_multithread.py -o <ip>
scan the port of one ip: python port_scan_multithread.py -m <ip1, ip2, ip3, ip4 ...>
'''
print 'exit'
sys.exit(1)
def socket_port(ip, port):
global openportnum
if port > 65535:
print 'port scanning beyond the port range, interrupt to scan'
sys.exit(1)
s = socket.socket(socket.af_inet, socket.sock_stream)
result = s.connect_ex((ip, port))
if(result == 0):
print ip, port,'is open'
openportnum += 1
s.close()
def start_scan(ip):
for port in range(0, 65535+1):
thread.start_new_thread(socket_port, (ip, int(port)))
time.sleep(0.006)
if __name__ == '__main__':
t = 0
if len(sys.argv)<2 or sys.argv[1] == '-h':
usage()
elif sys.argv[1] == '-o':
one_ip = raw_input('please input ip of scanning: ')
t = time.time()
start_scan(one_ip)
elif sys.argv[1] == '-m':
many_ip = raw_input('please input many ip of scanning: ')
ip_seg = many_ip.split(',')
t = time.time()
for i in ip_seg:
start_scan(i)
print
print 'total open port is %s, scan used time is: %f ' % (openportnum, time.time()-t)
运行效果图
更多python实现的多线程端口扫描功能示例。