Здрасьте всем!Надо прогу написать под редхат линух, которая на одном интерфейсе слушает в промискусе пакеты, потом изменяет заголовки и отправляет на другой интерфейс измененными. Подскажите как это сделать? То есть какую сишную библиотеку лучше использовать или какие функции, буду очень признателен, дедлайн скоро :))
> Здрасьте всем!
>
> Надо прогу написать под редхат линух, которая на одном интерфейсе слушает
>в промискусе пакеты, потом изменяет заголовки и отправляет на другой интерфейс
>измененными. Подскажите как это сделать? То есть какую сишную библиотеку лучше
>использовать или какие функции, буду очень признателен,На уровне пользовательского интерфейса это будет невозможно реализовать IMHO. Я считаю, что для Linux стоит использовать Netfilter Hooks, просто вылавливаешь пакеты, модифицируешь и передаешь дальше. О том, как использовать такие "хуки" спроси у Гагла, он знает.
Если что, будем советоваться) Удачи!> дедлайн скоро :))
Что там дед говорит про лайн ? :)
Удачи!
А я тут уже начал писать с сырыми сокетами, с ними разве не получится? Этож линух, там packet sockets...
Или есть подводные каменья?
Kak variant - vzyat' PCAP ili pol'zuisya RAW_SOCK.
> Здрасьте всем!
>
> Надо прогу написать под редхат линух, которая на одном интерфейсе слушает
>в промискусе пакеты, потом изменяет заголовки и отправляет на другой интерфейс
>измененными. Подскажите как это сделать? То есть какую сишную библиотеку лучше
>использовать или какие функции, буду очень признателен, дедлайн скоро :))
>Kak variant - vzyat' PCAP ili pol'zuisya RAW_SOCK.
Pcap слать пакеты не умеет, насколько мне известно... Кстати тут проблемка - не подскажете функцию, которая переводит ip из in_addr в дот-нотейшн стринговый и обратно? Была такая, но никак не могу вспомнить/найти в манах.
>>Kak variant - vzyat' PCAP ili pol'zuisya RAW_SOCK.
>
>Pcap слать пакеты не умеет, насколько мне известно...Таки да, не умеет ...
> Кстати тут проблемка - не подскажете функцию, которая переводит ip из in_addr в дот-нотейшн стринговый
>и обратно? Была такая, но никак не могу вспомнить/найти в манах.
>The inet_ntoa() function converts the specified Internet host address to a string in the Internet standard dot notation.
> Здрасьте всем!
>
> Надо прогу написать под редхат линух, которая на одном интерфейсе слушает
>в промискусе пакеты, потом изменяет заголовки и отправляет на другой интерфейс
>измененными. Подскажите как это сделать? То есть какую сишную библиотеку лучше
>использовать или какие функции, буду очень признателен, дедлайн скоро :))тут в основном форуме спрашивали про userspace bridge,
так тебе тоже ссылки могут быть полезны как примеры кода:для линукс (хотя старый и с багами)
http://www.ujep.cz/~lupomesk/bridged/для Netbsd/bpf:
ftp://ftp.kame.net/pub/kame/misc/bridged-20010701.tar.gz
под фрибсд компилится с минимальной переделкой (и похоже это баг)
в bridge.c
#ifdef HAVE_NET_ETHERNET_H -> #ifndef HAVE_NET_ETHERNET_H
Спасибо, что подвердили утверждение про пкап, а то неприятно было бы узнать что я чтото недогреб :))
И теперь вопрос может не в тему, но всетаки.
Никто не знает, в редхате 9-м, там многопроцессорные машины сами определяются, или надо как в bsd врубать отдельно второй и более процессоры, а по умолчанию работает только один?
Кстати, в rawsockets можно посылать пакеты как мессаджи, то есть с помощью sendmsg, а то он уже достал, постоянно invalid argument. И еще - как узнать МАС неподнятого интерфейса, чтоб его потом можно было записать в unsigned char sll_addr[8] (это в структуре sockaddr_ll)???
> Кстати, в rawsockets можно посылать пакеты как мессаджи, то есть с
>помощью sendmsg, а то он уже достал, постоянно invalid argument. И
>еще - как узнать МАС неподнятого интерфейса, чтоб его потом можно
>было записать в unsigned char sll_addr[8] (это в структуре sockaddr_ll)???
ioctl(sock_fd, SIOCGIFHWADDR, &ifr)помещает в ifr.ifr_hwaddr.sa_data mac адрес
проврено на интерфейсе который принудительно
ifconfig eth0 down
>> Кстати, в rawsockets можно посылать пакеты как мессаджи, то есть с
>>помощью sendmsg, а то он уже достал, постоянно invalid argument. И
>>еще - как узнать МАС неподнятого интерфейса, чтоб его потом можно
>>было записать в unsigned char sll_addr[8] (это в структуре sockaddr_ll)???
>
>
>ioctl(sock_fd, SIOCGIFHWADDR, &ifr)
>
>помещает в ifr.ifr_hwaddr.sa_data mac адрес
>проврено на интерфейсе который принудительно
>ifconfig eth0 downЯ не уверен, но не может ли возникнуть проблем с этой фичей?
Когда ты опустил интерфейс в даун, то таблица маршрутизации помнит мак адрес. Но в том случае, если этот интерфейс был в попущеном состоянии достаточно долго, с момента загрузки системы к примеру, то мак адреса то никто и не знает .... не так ли ?
таблица маршрутизации тут не причём
мы ведь узнаем мак адрес _локального_ интерфейса
sock_fd - это SOCK_RAW сокет, забинденый на наш локальный интерфейс
>
>таблица маршрутизации тут не причём
>мы ведь узнаем мак адрес _локального_ интерфейсаАх, да, слажал:) Извиняюсь за невнимательность.
Огромная благодарность за оперативность и подробность.
> Огромная благодарность за оперативность и подробность.
=) если что-то работающее получится, был бы благодарен за сырцы =)