微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Linux:如何设置外部网络环回到/从单个接口?

如何解决Linux:如何设置外部网络环回到/从单个接口?

我有一个 Linux 机器,通过单光纤链路(10G 以太网)连接到某个测试套件。我需要确认我可以向测试套件发送以太网帧,并且测试套件可以环回这些帧,并且我可以读取返回的帧(测试套件当然比这复杂得多,但是我在我可以测试其他任何东西之前需要环回)。

我有一个10GE接口,ens4f0,IP地址192.168.50.1,MAC地址0:1:2:3:4:5。测试套件的 IP 地址为 192.168.50.2,但这无关紧要。它嗅探 dst MAC 地址,并以 0:1:2:3:4:7 的 DMAC 环回帧。

为了运行测试,我首先这样做:

# arp -s 192.168.50.3 -i ens4f0 0:1:2:3:4:7
# ip link set ens4f0 promisc on

这个想法是,如果我将数据包发送到(不存在的)IP 地址 192.168.50.3,那么它们将通过 ens4f0 到达测试套件,它会找到 dst MAC 地址 0:1:2:3:4: 7,然后将它们发送回始发接口。 I/F 设置为混杂,我现在的问题是从 ens4f0 读取返回的帧。

为此,我在 linux 机器上设置了两个 socat 实例:

terminal A:
# socat INTERFACE:ens4f0 -
terminal B:
$ socat - UDP:192.168.50.3:8000

然后我在终端 B 中输入。

问题:我认为这行不通。终端 A 中的 socat 接收器正在看到输入到终端 B 中的文本,但 Wireshark 只能看到 ens4f0 上的一个帧(而在 lo 或常规接口上看不到任何内容)。 Wireshark 看到的框架是:

src IP: 192.168.50.1
dst IP: 192.168.50.3
dst port: 8000
src MAC: 0:1:2:3:4:5
dst MAC: 0:1:2:3:4:7

问题:

  1. 这正是我期望的框架,但为什么只有其中一个socat 接收器显示的是什么?
  2. socat 接收器在我实际在终端中输入的文本之前显示二进制数据包数据 - 是否有某种方法可以将其设置为类似聊天的模式,因此我只能看到输入的文本?立>
  3. 有没有更好的方法来做到这一点?

编辑

  1. 如果我在测试套件中禁用环回,我会得到与上述完全相同的结果,因此测试套件不会发回帧
  2. 如果我处理光衰减问题,那么 Wireshark 会看到两个帧,socat 接收器现在会重复我在终端 B 中输入的每一行两次。所以,问题似乎是我对如何让 socat 运行的理解

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。