python端口扫描器
简介
这扫描器通过python自带的模块编写,第一个主要通过socket,sys模块编写,第二个通过OptionParser,socket模块编写,这是第一次尝试,希望能在学习python中得到新东西,新体验.
使用示例
python jxf.py -help 帮助
python jxf.py -version 查看版本
python jxf.py -i 127.0.0.1 -p 80,90 选择端口扫描
python jxf.py -i 127.0.0.1 -p 80-90 范围扫描
python jxf.py -i 127.0.0.1 -p all 全部端口扫描
python jxf.py -i 127.0.0.1 -p default 默认端口扫描
端口扫描器 一
import socket,sys
# 判断端口开放
def open(ip,port):
s=socket.socket()
try:
s.connect((ip,port))
return True
except:
return False
def scan(ip,portlist):
for i in portlist:
if open(ip,i):
print("%s host %s port open"%(ip,i))
else:
print("%s host %s port close" % (ip, i))
def rscan(ip,start,end):
for i in range(start,end):
if open(ip,i):
print("%s host %s port open"%(ip,i))
else:
print("%s host %s port close"%(ip,i))
#单个端口扫描:
def pscan(ip,port):
if open(ip, port):
print("%s host %s port open" % (ip, port))
else:
print("%s host %s port close" % (ip, port))
def main():
defaultports=[135,139,443,445,80,3306,22,1433,3389]
cs1=sys.argv[1]
if len(sys.argv)==2:
if cs1[0]=='-':
options=cs1[1:]
if options=='version':
print("当前版本是1.0")
elif options=='help':
print("python jxf.py [ip] [port]")
sys.exit()
# 设置默认扫描为127.0.0.1
else:
scan(cs1,defaultports)
#参数有逗号的情况
elif len(sys.argv)==3:
if ',' in sys.argv[2]:
a=sys.argv[2]
b=a.split(',')#字符串分割
aport=[]
for i in b:
aport.append(int(i))
scan(sys.argv[1],aport)
# 范围扫描
elif '-' in sys.argv[2]:
S=sys.argv[2]
S=S.split('-')
start=int(S[0])
end=int(S[1])
rscan(sys.argv[1],start,end)
else:
aport2 = sys.argv[2]
aport2 = int(aport2)
pscan(sys.argv[1], aport2)
if __name__ == '__main__':
main()
端口扫描器 二
import socket
from optparse import OptionParser
#判断连接
def open(ip,port):
s=socket.socket()
try:
s.connect((ip, port))
return True
except:
return False
def scan(ip,port):
for i in port:
if open(ip,i):
print("%s host %s port open"%(ip,i))
else:
print("%s host %s port close"% (ip, i))
def rscan(ip,start,end):
for i in range(start,end):
if open(ip,i):
print("%s host %s port open"%(ip,i))
else:
print("%s host %s port close"% (ip, i))
def pscan(ip,port):
if open(ip, port):
print("%s host %s port open" % (ip, port))
else:
print("%s host %s port close" % (ip, port))
def main():
usage="usage:xxx.py -i ip地址 -p 端口"
parse=OptionParser(usage=usage)
parse.add_option("-i","--ip",type="string",dest="ipaddress",help="your targe ip here")
parse.add_option("-p","--port",type="string",dest="port",help="your targe port here")
(options,args)=parse.parse_args()
ip=options.ipaddress
port=options.port
defaultport=[80,135,139,443,445,3306,3389,8080]
if ',' in port:
port=port.split(',')
port1=[]
for i in port:
port1.append(int(i))
scan(ip,port1)
elif '-' in port:
port=port.split('-')
start=int(port[0])
end=int(port[1])
rscan(ip,start,end)
elif 'all' in port:
rscan(ip,1,65535)
elif 'defaultport' in port:
scan(ip,defaultport)
else:
pscan(ip,port)
if __name__ == '__main__':
main()