#! usr/bin/python2.7
# coding=gbk
import sys
import socket
import threading,time
socket.setdefaulttimeout(10) #设置全局默认超时时间
import thread
import time #获取时间和延时
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):
#if num >= IPend:
#print "IP导入数组完成"
return '%s.%s.%s.%s' % ((num & 0xff000000) >> 24,
(num & 0x00ff0000) >> 16,
(num & 0x0000ff00) >> 8,
(num & 0x000000ff))
def get_ip(Aip1,Aip2): #返回数组
global IPend
IPend = Aip2
return [num2ip(num) for num in range(Aip1,Aip2+1) if num & 0xff]
def socket_port(ip,PORT):
try:
if PORT >= 65535:
print "0-65535端口扫描结束,端口值超出范围"
s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
#s.settimeout(float(1))
result = s.connect_ex((ip,PORT))
if (result == 0):
print ip,":",PORT,"-"*10,u"端口开放","\n"
s.close()
except:
print "扫描端口异常","\n"
if __name__ == '__main__':
print '+','-'*20,'+'
print '+',' '*20,'+'
print '+',' '*2,'端口扫描器V1.1',' '*2,'+'
print '+',' '*20,'+'
print '+','-'*20,'+'
ip1 = ip2num(raw_input('输入起始ip:'))
ip2 = ip2num(raw_input('输入结束ip:'))
list_ip = get_ip(ip1,ip2)
print "需要扫描"+str(len(list_ip))+"个ip"
print "输入想要扫描的端口段:"
n = int(raw_input("输入起始端口:"))
m = int(raw_input("输入结束端口:"))
#list_ip = get_ip(ip2num("127.0.0.1"),ip2num("127.0.1.1"))
t = time.time()
I1 = 0
while I1 < len(list_ip):
#print list_ip[I1]
for i in range(n,m):
thread.start_new_thread(socket_port,(list_ip[I1],int(i)))
time.sleep(0.01)
I1 = I1 + 1
print '扫描端口完成用时 time:%f 秒' %(time.time()-t)
print "扫描结束"
raw_input()