LINUX.ORG.RU

C/C++: Сокет какого типа надо открыть, чтобы плеваться любыми датаграммами через любые сетевые интерфейсы?


0

0

Хочу посылать датаграммы произвольного содержания, выбирая произвольный из имеющихся сетевых интерфейсов.

1. Сокет какого типа открывать?
2. Какие хитрости могут быть при записи в этот сокет? Какие ioctl надо подёргать и зачем?
3. Как при отправке датаграммы выбрать произвольный сетевой интерфейс?
4. Как нагрепать список имеющися сетевых интерфейсов и их свойства в рантайме?

Зачем - не надо спрашивать, меня самого прикалывает этот вопрос.

★☆

Последнее исправление: kiverattes (всего исправлений: 1)

выбор интерфейса - по ip.

список интерфейсов - ls /sys/class/net

создать - обычный датаграмный сокет.

хитростей - нет.

x0r ★★★★★
()

Поройся в исходниках libpcap, что ли.

no-such-file ★★★★★
()
Ответ на: комментарий от kiverattes

1) вряд ли tcp-пакет можно выплюнуть если нету ip-адреса

2) роутинг настраивается в системе и система сама определяет куда и через какой интерфейс послать пакет и делает это на основе ip-адреса (в случае tcp/ip).

AndreyKl ★★★★★
()

4) список есть если ifconfig запустить

AndreyKl ★★★★★
()
Ответ на: комментарий от kiverattes

затем, что ни датаграмный, ни потоковый сокет на интерфейсе без IP не откроешь. а теперь марш читать про OSI и man по posix sockets

x0r ★★★★★
()

1. Сокет какого типа открывать?

raw

2. Какие хитрости могут быть при записи в этот сокет? Какие ioctl надо подёргать и зачем?

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

3. Как при отправке датаграммы выбрать произвольный сетевой интерфейс?

никак - роутинг недоступен для raw сокетов - они сажаются сразу на целевой интерфейс

4. Как нагрепать список имеющися сетевых интерфейсов и их свойства в рантайме?

if_nameindex если память не изменяет

ps/ помимо lor рулят ещё и man`ы :-) причём даже более. Там всё есть - man, info, apropos вам в помощь

MKuznetsov ★★★★★
()
Ответ на: комментарий от x0r

список интерфейсов - ls /sys/class/net

ну ты совсем дебил, да? man getifaddrs

anonymous
()
Ответ на: комментарий от MKuznetsov

никак - роутинг недоступен для raw сокетов - они сажаются сразу на целевой интерфейс

А что есть «целевой интерфейс», если датаграмма не содержит в себе IP-пакета, например?

kiverattes ★☆
() автор топика
Ответ на: комментарий от kiverattes

ЕМНИП SO_BINDTODEVICE, и можешь слать в сетевую розетку любой шлак.

staseg ★★★★★
()
Ответ на: комментарий от kiverattes

Это трансляшка IP в MAC. («IP» - это то, что знают протоколы выше, вместо «X.X.X.X» можно другую бороду передавать, лишь бы кто-то сказал «мяу» и прислал свой MAC, для связи двух программ на двух компах достаточно). ЕМНИП, в старых игрушках, когда приходилось пилить с нуля все свое, обходились довольно примитивными реализациями стеков - задача была связать хоста игры с другими при отсутствии вообще какой-либо поддержки со стороны оси. Где-то был целый «ассемблероподобный» язычок для манипуляций с ARP. (А еще IPX/SPX был когда-то популярнее TCP/IP и UDP - там вообще не использовалась «X.X.X.X» нотация.)

slackwarrior ★★★★★
()
Ответ на: комментарий от kiverattes

Да никакой завязки :) Magic numbers для хоста и для клиентов (достаточно двух чисел на самом деле, в простейшем случае), и никаких IP - сплошные маки и Ethernet. А чего надстроить выше - вообще все в своих руках.

slackwarrior ★★★★★
()
Ответ на: комментарий от slackwarrior

Яникуянепонел! При чём тут ARP, если ARP связывает IP и MAC, а мне нахрен не нужен никакой IP и у меня даже может не быть никакой IP-таблицы маршрутизации?

kiverattes ★☆
() автор топика
Ответ на: комментарий от kiverattes

Ты просто не можешь абстрагироваться от того, как ARP используется сейчас :) «ARP был спроектирован для случая передачи IP-пакетов через сегмент Ethernet. При этом общий принцип, предложенный для ARP, может, и был использован и для сетей других типов.» (c) Таблица маршрутизации вообще не при чем. Берешь http://tools.ietf.org/html/rfc826 и делаешь свой ARP с резолвингом MAC и пэйлоадом, которого не интересует никакой «IP».

slackwarrior ★★★★★
()
Последнее исправление: slackwarrior (всего исправлений: 1)
Ответ на: комментарий от slackwarrior

Я могу абстрагироваться, вы скажите только как это сделать )

kiverattes ★☆
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.