2015-03-15 4 views
1

Я пытаюсь узнать что-то о сокетах в Linux. У меня есть небольшая доска разработки, вроде малины Pi с Linux, работающей внутри. К сожалению, у него нет Ethernet-порта или USB-порта.отправлять данные из raw socket в udp или tcp socket

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

Моя проблема в том, что когда я пытаюсь выполнить ping какой-то публичный IP-адрес, я могу видеть в tcpdump ICMP-запросы и ответы как на компьютере, так и на доске разработки. Но пинг выглядит так, будто ничего не получает.

Я попытался использовать loopback-интерфейс вместо фиктивного интерфейса, но в этом случае пинги зацикливаются, и устройство перестает отвечать на запросы через некоторое время :). Но пинг действительно получил ICMP-ответ, а TCP-соединение не работало.

Я также попытался использовать 2 фиктивных интерфейса и создать мост.

Буду очень признателен за любые предложения.

+0

решаемых с помощью интерфейса туна :) это выглядит как Linux не может «связывать» сырой сокет другого типа сокета, поскольку все пакеты передаются и никто не получил , – nergalino

ответ

0

Я думаю, что вы можете скачать и тестирование некоторую внешнюю программу на локальном компьютере, например, из GitHub - https://github.com/hoxnox/rawsock_recv_example Внутри этого примера вы найдете проект CMake, что построить простой UDP сервер эхо и приложения, которые создают два сырых UDP сокеты.

Как хороший справочный документ, который вы можете использовать эту статью - http://sock-raw.org/papers/sock_raw

+0

Я генерирую ICMP-сообщения с помощью ping, сырой сокет - это просто для захвата всех пакетов из интерфейса и отправки ответов (я пытаюсь создать что-то вроде «driver»). ответы возвращаются, я могу видеть их в tcpdump, но похоже, что бинарные строки ping их не получают. в любом случае спасибо за ответ – nergalino