Сервер и клиент на одной машине без обратной связи - PullRequest
2 голосов
/ 20 сентября 2011

Я использую сервер и клиент на той же машине (Linux).Как заставить пакеты проходить через сеть (коммутатор), а не через петлю?

Спасибо,

Майкл

Ответы [ 4 ]

3 голосов
/ 20 сентября 2011

Поскольку вы спрашиваете об этом на сайте программирования, я предполагаю, что у вас есть исходный код.

Когда вы создаете сокет на стороне клиента, вы можете ограничить его определенным интерфейсом.Обычно вы этого не делаете (вы просто набираете connect() без bind() сначала) и позволяете ОС определить лучший исходящий интерфейс, но это не обязательно.

2 голосов
/ 20 сентября 2011

Вы можете попробовать установить опцию сокета SO_BINDTODEVICE на сокетах клиента и сервера и указать в качестве параметра внешний интерфейс NIC.

См. http://codingrelic.geekhold.com/2009/10/code-snippet-sobindtodevice.html для примера

Я не уверен, что этого достаточно - может быть проверка работоспособности в стеке IP ядра, чтобы отбросить пакеты, чьим адресатом и источником Ethernet являются оба вы. Может быть sysctl, чтобы отключить эту проверку, или вы можете скомпилировать свое собственное ядро ​​без проверки для этого конкретного теста.

0 голосов
/ 20 сентября 2011

Вы не можете, если у вас нет какого-либо устройства в сети, задачей которого является отправка данных обратно к вам.Обычно нет ничего, что могло бы сделать это.Если вы отправляете данные в сеть, вы не получите их обратно.

Если вы настроили что-то для возврата вам данных, отправьте данные на них, следуя любому механизму, который он поддерживает.

0 голосов
/ 20 сентября 2011

Может, стоит попробовать подключиться через прокси-сервер?

...