【问题标题】:difference between socket.PF_PACKET and socket.AF_INET in python [closed]python中socket.PF_PACKET和socket.AF_INET之间的区别[关闭]
【发布时间】:2013-09-21 05:15:08
【问题描述】:

我只想知道在python socket编程中,什么时候用socket_PF_PACKET,什么时候用socket.AF_INET,这两者有什么区别?

【问题讨论】:

  • 阅读更多关于sockets的信息,你就会发现。

标签: python sockets python-2.7 python-3.x


【解决方案1】:

如果您想使用 Internet 协议进行通信,请使用 AF_INET:TCP 或 UDP。这是迄今为止最常见的选择,几乎可以肯定是您想要的。

如果您想在 Internet 协议层以下的最基本级别发送和接收消息,请使用 PF_PACKET,例如因为您自己实现协议。您的进程必须以 root 身份(或具有特殊功能)运行才能使用PF_PACKET。这是一个非常高级的选项。如果你要问这个问题,你要AF_INET,而不是PF_PACKET

【讨论】:

  • 好的,谢谢。我正在创建一个 ICMP 数据包并希望在我的 LAN 上发送它。当我使用 AF_INET 时它正在工作,但是当我使用 PF_PACKET 时,它在“sendto”中显示错误,例如...“error- sendto(packet, (destination, 0)) ... no such device” ....跨度>
  • 你是说,在 PF_PACKET 域中创建的套接字,我不需要将 L4 和 L3 层标头附加到数据包,只需 L2 层标头就足够了吗?这意味着,这样的数据包仅用于将 pkt 发送到直接连接的下一跳?
  • @Radhe Tripathi,你想在发送数据包之前使用绑定......像 s.bind(("eth0",socket.htons(0x0800))) #eth0 是你的接口名称,你可以在 ifconfig 上找到
猜你喜欢
  • 1970-01-01
  • 2013-01-04
  • 1970-01-01
  • 1970-01-01
  • 2011-06-24
  • 2014-11-28
  • 2016-08-01
  • 2011-10-07
  • 2012-01-12
相关资源
最近更新 更多