【问题标题】:Sending packets to 127.0.0.1 through gopcap通过 gopcap 向 127.0.0.1 发送数据包
【发布时间】:2018-11-09 03:05:00
【问题描述】:

似乎通过使用 gopacket/gopcap 发送的数据包以某种方式“发送”,因为它们在 tshark 跟踪中可见:

444 143.613451037    127.0.0.1 → 127.0.0.1    UDP 66 6000 → 8888 Len=22

但这些数据包永远不会到达在同一台机器上侦听 127.0.0.1:8888 的进程(例如 netcat -ul 8888)。

有人对为什么会这样或要尝试的事情有任何提示吗?如前所述,这些数据包实际上在 tshark 跟踪中可见......之后它们似乎完全消失了。

... irrelevant
out , err := pcap.OpenLive(*iface, 65535, true, -1 * time.Second)
out.WritePacketData(buf.Bytes())
... irrevelant

这个想法是构造数据包并将它们发送到lo,以便侦听127.0.0.1:<some port>的进程实际上可以看到这些数据包。

IP src/dst 均为 127.0.0.1,以太网 src/dst 均为 00:00:00:00:00:00。

编辑:

就更多研究而言,似乎使用 pcap 发送数据包会绕过 IP 网络堆栈,从而使进程无法看到数据包。一种解决方法是在跟踪中剥离较低级别的数据包并打开常规 udp/tcp 套接字并通过该套接字发送有效负载。

【问题讨论】:

  • 疯狂猜测。由于某些防止欺骗的规则,某些本地防火墙规则是否会丢弃数据包?如果您的防火墙规则被清除/关闭,是否也会发生这种情况?
  • nah... pcap 似乎绕过了 ip 堆栈。
  • pcap 中数据包的以太网地址是什么?你是如何捕获 pcap 的?您在发送之前是否更改了它的内容?
  • 我在本地机器上捕获了它们,所以地址应该没问题。
  • 为了它的价值:以太网地址全为零(可能是因为它的lo 而不是eth*)。 ip src 和 dst 显然是 127.0.0.1。

标签: linux go network-programming pcap


【解决方案1】:

就更多研究而言,使用 pcap 发送数据包似乎会绕过 IP 网络堆栈,从而使进程无法看到数据包。一种解决方法是在跟踪中剥离较低级别的数据包并打开常规 udp/tcp 套接字并通过该套接字发送有效负载。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-24
    • 1970-01-01
    • 1970-01-01
    • 2021-02-21
    相关资源
    最近更新 更多