Python - 打印出端口及其名称

3

我有以下代码是用Python 2.7写的:

#...import stuff

remoteServer = raw_input("Enter a remote host to scan: ")
remoteServerIP = socket.gethostbyname(remoteServer)

print "Please wait, scanning remote Host", remoteServerIP

try:
    for port in xrange(1, 1024):
        sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        result = sock.connect_ex((remoteServerIP, port))
        if result == 0:
            print "port {}:    open".format(port)
        sock.close

except KeyboardInterrupt:
    print "\nexiting..."
    sys.exit()

输出:

Enter a remote host to scan: www.myexamplesite.com
Please wait, scanning remote Host xxx.xxx.xx.xx
port 21:    open
port 22:    open
...

但是问题在于,我也想知道哪些端口被使用以及它们被用来做什么,就像这样:

#... as usual
port 1 httpserver
port 2 chat server
...

但这只打印了从1到1024的端口,是否有一种方法可以做到这一点?


IANA 维护着《服务名与传输协议端口号注册表》(Service Name and Transport Protocol Port Number Registry),但这并不能保证某个应用程序未以非标准的方式使用端口。例如,主机可能在完全不同的情况下使用标准 HTTP 端口 80。 - Ron Maupin
1个回答

2

socket.getservbyport()将端口号转换为该端口上运行的服务的名称(通过/etc/services),但它不会实际上通过该端口进行通信以查找实际正在运行的服务。


但我认为大多数服务器使用相同的端口来执行相同的任务,对吧? - fipsi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接