猿问

TCP 端口测试不准确,使用 `ip = ipaddress.ip_address

在这台测试机上,tcp/80是在听,而tcp/4444不是在听。(我已经用 验证了这一点netstat -an)


如果我只是将args.ip值传递给ip,并将其转发给scan()函数,则扫描结果总是准确的。


ip = args.ip

正常输出:


C:\>python script.py 127.0.0.1

Port number: 80

Connecting to 127.0.0.1:80

OK 127.0.0.1:80


C:\>python script.py 127.0.0.1

Port number: 4444

Connecting to 127.0.0.1:4444

FAIL 127.0.0.1:4444


C:\>

但是,当我尝试使用以下功能验证 IP 地址时


ip = ipaddress.ip_address(args.ip)

扫描结果总是错误的。


错误的输出... tcp/80 已启动并正在运行:


C:\>python script.py 127.0.0.1

Port number: 80

Connecting to 127.0.0.1:80

FAIL 127.0.0.1:80

这段代码有什么问题?


import socket, argparse, ipaddress


def main():

    global ip

    parser = argparse.ArgumentParser()

    parser.add_argument('-u')

    group = parser.add_mutually_exclusive_group()

    group.add_argument('-i')

    group.add_argument('ip', nargs='?')

    args = parser.parse_args()

    if args.i:                                      

        print("IP Address is .. " + args.i)

    elif args.ip:                                   

        ip = ipaddress.ip_address(args.ip)          # Prob

        #ip = args.ip                               # OK

        scan()

    elif args.u:

        print("URL is " + args.u)

    else:

        print('No argument provided')


def scan():

    port = input('Port number: ')

    print('Connecting to %s:%s' % (ip,port))    

    try:

        s=socket.socket(socket.AF_INET, socket.SOCK_STREAM)

        s.connect((ip, int(port)))

        print('OK %s:%s' % (ip, port))

    except:

        print('FAIL %s:%s' % (ip, port))


main()

是否有可能验证 IP 地址,然后将其转发到另一个功能并仍然获得正确的端口扫描测试?


呼如林
浏览 182回答 1
1回答
随时随地看视频慕课网APP

相关分类

Python
我要回答