如何使用python将协议号转换为名称?

时间:2016-05-03 13:04:01

标签: python networking

像pcp和udp这样的协议都用数字表示。

import socket
socket.getprotocobyname('tcp') 

上面的代码将返回6.

如果我知道协议号码,如何获取协议名称?

2 个答案:

答案 0 :(得分:6)

我要说几乎肯定有更好的方法,但是所有协议名称(和值)都存储为前缀为"IPPROTO"的常量,因此您可以通过迭代来创建查找表模块中的值:

import socket

table = {num:name[8:] for name,num in vars(socket).items() if name.startswith("IPPROTO")}

>>> table[6]
'TCP'

答案 1 :(得分:1)

Python的socket模块将执行此操作:

import socket
socket.getservbyport(80)

结果

>>> import socket
>>> socket.getservbyport(6)
'zip'
>>> socket.getservbyport(80)
'http'

正如socket.getservbyname(servicename[, protocolname])和socket.getservbyport(port[, protocolname])所述的文档。第二个可选的协议名称,如果给出,应为'tcp'或'udp',否则任何协议都将匹配。