是的,我确实已经尝试找到相关信息。
Python套接字文档列出了我认为是协议的列表:
SO_*
socket.SOMAXCONN
MSG_*
SOL_*
IPPROTO_*
IPPORT_*
INADDR_*
IP_*
IPV6_*
EAI_*
AI_*
NI_*
TCP_*
他们究竟做了什么?假设我使用了
s = socket.socket(socket.AF_INET, socket.SOCK_RAW, socket.IPPROTO_IP)
这是做什么的?我知道它是一个原始套接字,但IPPROTO_IP是否意味着我必须构建一切? (即IP报头到TCP的数据?)
Python文档说我可以在套接字的Unix文档中找到有关上述内容的信息,但我找不到该文档。有谁知道它在哪里?
答案 0 :(得分:5)
有很多Linux手册页描述socket:
通常,我们将这些参数用于socket
:
地址系列:互联网域地址系列AF_INET
,UNIX域地址系列AF_UNIX
。
套接字类型:TCP的SOCK_STREAM
,UDP的SOCK_DGRAM
。当然,您可以使用SOCK_RAW
直接访问IP协议。
协议:使用TCP或UDP时,将其保留为0就好了;使用RAW时,可以指定协议为0,TCP套接字为IPPROTO_TCP,UDP套接字为IPPROTO_UDP。
并且,SO_
表示"套接字选项",SOL_
表示"套接字选项级别",用于通过{{1}设置套接字选项}(也在SOCKET中提到)。
事实上,您可以在setsockopt
部分的这些页面底部找到更多页面。请注意,2或3的页面是具体的系统调用或库函数,页面7是您需要的。