| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Программирование под Unix/Linux > программирование 2 сетевых карт |
| Автор: 11Space11 19.10.2010, 09:32 |
| как правильно программировать 2 сетевые карты? на компе стоит 2 сетевухи, как можно отправить пакеты раздельно на eth0 и eth1(одни данные отправлять на eth0 другие на eth1) .протокол UDP (тип сокета SOCK_DGRAM) сообщения мультикастовые. какую структуру sockaddr_xx использовать? в структуре sockaddr_in такого нет, нашёл в структуре sockaddr_ll индекс устройства(sll_ifindex), но оно неприемлемо, так как эта структура работает с RAW Socket и туда нужно записывать MAC адрес. в setsockopt тоже не нашёл, как привязать сокет к интерфейсу. пробовал ioctl SIOCSIFNAME - результата не дало |
| Автор: MAKCim 19.10.2010, 10:26 |
| man 2 bind в качестве sockaddr_in указывайте локальный ip адрес нужного интерфейса |
| Автор: 11Space11 20.10.2010, 10:23 | ||||
| спасибо, работает. Только как-то по IP не очень красиво, циркуляция сообщений происходит мультикастом, IP может и не стоять возможно ли привязать сокет с указанием "eth0" или "eth1"? и ещё попутный вопрос, эта же программа должна получать сообщения по обоим интерфейсам, так вот по eth0 она принимает, а по второму(eth1 не принимает) настройка Сетевых карт: route add -net 224.0.0.0 netmask 224.0.0.0 dev eth0 route add -net 224.0.0.0 netmask 224.0.0.0 dev eth1 код
и приём
все настройки сетевых карт одинаковые, IP eth0 192.168.0.37 IP eth1 192.168.0.239 в поле mreq0.imr_interface.s_addr вставлял адреса он это понимает, та же ситуация c eth0 работает с eth1 - нет |
| Автор: 11Space11 20.10.2010, 12:26 | ||
попробовал для ifindex обоих сетевух(2 и 3) - результат отрицательный. Сейчас я убрал чтение с eth0 оставил только с eth1 не читает именно потому, что через eth1. кажется, что сокет как-то остаётся привязан к eth0 , либо сетевухи настроены неодинаково, хотя ifconfig и route говорят, что всё одинаково. не понимаю, в чём может быть дело |
| Автор: bsa 21.10.2010, 13:09 |
| 11Space11, у тебя на сетевухах одинаковые IP что ли? |
| Автор: 11Space11 21.10.2010, 14:34 | ||
IP eth0 192.168.0.37 IP eth1 192.168.0.239 одинаковые не IP, одинаковые группы. программа заработала, но не думаю, что вопрос решён до конца программа route выдавала
а если убрать одно правило для eth0 и оставить для eth1 всё работало, то есть это 1 правило фильтровало мои сообщения. Тогда возникает вопрос, почему из-за того, что мои сетевухи принадлежали одной группе(192.168.0.хх), 1 правило, которое предназначено для eth0 применялось для eth1. Ведь сокет я привязывал к eth1(и он к нему привязывался). кстати программа tspdump видела мои сообщения, но она написана на низком уровне то есть фильтрация должна проходить на уровне IP |