像tcp和udp這樣的協議都是用數字表示的。如何將協議號碼與python命名?
import socket
socket.getprotocobyname('tcp')
上面的代碼將返回6.
我怎樣才能得到該協議的名稱,如果我知道這個協議是多少?
像tcp和udp這樣的協議都是用數字表示的。如何將協議號碼與python命名?
import socket
socket.getprotocobyname('tcp')
上面的代碼將返回6.
我怎樣才能得到該協議的名稱,如果我知道這個協議是多少?
我想說的是幾乎肯定有更好的方法,但是所有的協議名稱(和值)都被存儲爲以"IPPROTO"
爲前綴的常量,因此您可以通過遍歷數組中的值來創建查找表模塊:
import socket
table = {num:name[8:] for name,num in vars(socket).items() if name.startswith("IPPROTO")}
>>> table[6]
'TCP'
雖然它提供協議高達'6'這是tcp(3和5除外),它是無法超越的。說11是用於上面的腳本給出一個鍵錯誤的UDP。 – RatDon
@RatDon'表[17] =='UDP'和根據[微軟的協議號碼](https://technet.microsoft.com/en-ca/library/cc959827.aspx)UDP與17.關聯確定11來自哪裏,但我坦率地不知道這方面的情況,對不起,我無法爲你提供更多的幫助。 –
對不起,我的錯誤,我採取了'十一'的十六進制數。但是仍然沒有132是用於SCTP的。是的,我同意。幾個領域是可用的,但不是全部。不管怎樣,謝謝。 – RatDon
Python的socket模塊將做到這一點:在
>>> import socket
>>> socket.getservbyport(6)
'zip'
>>> socket.getservbyport(80)
'http'
import socket
socket.getservbyport(80)
結果作爲socket.getservbyname(servicename[, protocolname]
)和socket.getservbyport(port[, protocolname])
提到的文檔。第二個可選的協議名稱,如果給出的話,應該是'tcp'或'udp',否則任何協議都會匹配。
是socket.getservbyport(6)「tcp」? –
nope,它是'zip',我不認爲這是正確的東西 –
@salomonderossi,你能夠以任何方式使用'getservbyport'來將'6'與'tcp'關聯嗎? OP在詢問「給出6我該如何取回'tcp'」,而你在答案中沒有這樣做。 –
請參閱https://bugs.python.org/issue24809 – cdarke
Python 2或Python 3? – cdarke