Python 扫描内网所有机器端口

'''
Python 扫描内网所有机器端口
'''
import socket

def main():
    #定义一个变量来接收输入的开始IP
    ip_start = input('请输入开始的IP地址(默认为本机IP):')
    #如果IP为空则设置开始IP和结束IP
    if ip_start == '':
        ip_start = socket.gethostbyname(socket.gethostname())
        ip_end = socket.gethostbyname(socket.gethostname())
    #开始IP不为空则设置结束IP
    else:
        ip_end = input('请输入结束IP(默认为本机IP):')
        #如果IP结束地址为空则设置结束IP地址
        if ip_end == '':
            ip_end = socket.gethostbyname(socket.gethostname())

    #定义一个变量来接收需要扫描的端口
    s = input('请输入目标主机端口,(默认扫描常用端口)')
    #如果接收的端口变量为空,则设置默认扫描开始端口
    if s == '':
        portlist = [21,22,23,80,135,139,445,1433,1502,3306,3389,8080,9015]
    #如果接收的端口变量不为空,则设置结束端口
    else:
        #将接收的端口s转换成int型变量
        startport = int(s)
        #定义一个变量接收结束端口
        s = input('请输入目标主机结束端口:(默认:65535)')
        #如果结束端口为空,则设置默认结束端口为65535
        if s =='':
            endport = 65535
        #默认端口不为空,则将接收到的端口字符转换成int型
        else:
            #将结束端口s变量转换为int型
            endport = int(s)
        #用range()函数生成开始端口到结束端口列表
        portlist = [i for i in range(startport,endport+1)]
    #获取IP地址的前三部分,并转换成字符串
    pre_ip='.'.join(ip_start.split('.')[:-1])
    #获取开始IP的最后部分,并转换成整数类型
    start=int(ip_start.split('.')[-1])
    #获取结束IP的最后部分,并转换为整数类型
    end=int(ip_end.split('.')[-1])
    #从起始IP最后数字到结束IP最后数字加一遍历
    for i in range(start,end+1):
        #IP的前三部分加小圆点加最后部分,组合成IP
        ip = pre_ip+'.'+str(i)
        for port in portlist:
            try:
                sk = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
                sk.settimeout(0.1)
                sk.connect((ip,port))
                sk.settimeout(None)
                print('Server %s port %d ok!'%(ip,port))
                sk.close()
                #结果保存在文件中
                f = open("IP_Port.txt,",'a')
                f.write(ip+' : '+str(port)+'\n')
                f.close()
            except Exception:
                #print('Server %s port %d Not ok!'%(ip,port))
                #print('*',end=' ')
                pass

if __name__ == '__main__':
    #调用main()函数
    main()

 

你可能感兴趣的:(Python 扫描内网所有机器端口)