2021-08-17

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()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值