2

我在同一台机器(linux)上运行服务器和客户端。如何强制数据包通过网络(交换机)而不是通过环回?

谢谢,

迈克尔

4

4 回答 4

3

由于您是在编程网站上问这个问题,所以我假设您有源代码。

创建客户端套接字时,可以将其限制为特定接口。通常你不会(你只是在connect()没有bind()先调用它的情况下调用它),让操作系统找出最好的传出接口,但这不是强制性的。

于 2011-09-20T08:19:27.663 回答
2

您可以尝试在客户端和服务器套接字上设置 SO_BINDTODEVICE 套接字选项,并将外部 NIC 接口作为参数。

有关示例,请参见:http ://codingrelic.geekhold.com/2009/10/code-snippet-sobindtodevice.html

我不确定这是否足够——内核 IP 堆栈中可能会进行健全性检查,以丢弃以太网目标和源都是你的数据包。可能有一个 sysctl 来禁用此检查,或者您可以编译自己的内核而不检查此特定测试。

于 2011-09-20T08:43:46.710 回答
0

也许您应该尝试通过代理服务器连接?

于 2011-09-20T08:14:01.723 回答
0

你不能,除非你的网络上有一些设备,它的工作是将数据发回给你。通常,没有什么可以做到这一点。如果您将数据发送到网络上,您将无法取回。

如果您设置了一些东西来将数据返回给您,请按照它支持的任何机制将数据发送给它。

于 2011-09-20T08:41:50.323 回答