python实现端口扫描

来源:互联网 发布:淘宝店铺等级排行 编辑:程序博客网 时间:2024/06/05 15:51

一 代码

import socketimport multiprocessingdef ports(ports_service):    #获取常用端口对应的服务名称    for port in list(range(1,100))+[143,145,113,443,445,3389, 8080]:        try:            ports_service[port] = socket.getservbyport(port)        except socket.error:            passdef ports_scan(HOST, ports_service):      ports_open = []    try:        sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)        #sock.settimeout(60)    except socket.error:        print('socket creation error')        sys.exit()    for port in ports_service:        try:            #尝试连接指定端口            sock.connect((HOST,port))            #记录打开的端口            ports_open.append(port)            sock.close()        except socket.error:            pass    return ports_openif __name__=='__main__':    m = multiprocessing.Manager()    ports_service = dict()    results = dict()    ports(ports_service)    #创建进程池,允许最多8个进程同时运行    pool = multiprocessing.Pool(processes=8)    net = '192.168.0.'    for host_number in map(str,range(105,106)):        host = net+host_number        #创建一个新进程,同时记录其运行结果        results[host] = pool.apply_async(ports_scan, (host, ports_service))        print('starting '+host+'...')    #关闭进程池,close()必须在join()之前调用    pool.close()    #等待进程池中的进程全部执行结束    pool.join()    #打印输出结果    for host in results:        print('='*30)        print(host,'.'*10)        for port in results[host].get():            print(port, ':', ports_service[port])

 

二 运行结果
starting 192.168.0.105...
==============================
192.168.0.105 ..........
80 : http