перехват сетевых обращений
От: aat Россия  
Дата: 15.07.04 13:00
Оценка:
Такая вот задачка. Необходимо в freeBSD (старое ядро, оч древнее) реагировать на все сетевые запросы, желательно связанные с пересылкой данных.
Нужно это для того чтобы программно зажигать и гасить лампочку (не на сетевой карте) индикации работы сети.
Как сделано...
Есть загружаемый драйвер который может вкл или выкл лампочку. В нем перехватываются вызовы send() и recv() (sendto, recvfrom) — вроде работает, но многие программы (ftp, rcp...) этими вызовами не пользуются. Тогда я попробывал перехватывать read(), write(), ioctl() с проверкой являются ли дескрипторы в этих вызовах сокетами.Но сокет не обязательно имеет отношение тока к сети, поэтому в Х моя лампочка моргает как сумашедшая.

Стека драйверов (как в виндах) в этих freeBSD нет, поэтому стандартно подцепиться к драйверу сетевой карты не получается, а менять код ядра или драйвера сетевой карты незя.

Может кто знает как можно решить такую проблему. Вероятно можно сделать демона, который сможет работать напрямую с драйвером сетевой карты и с моим драйвером.
Re: перехват сетевых обращений
От: aka50 Россия  
Дата: 15.07.04 15:07
Оценка:
Здравствуйте, aat, Вы писали:

aat>Такая вот задачка. Необходимо в freeBSD (старое ядро, оч древнее) реагировать на все сетевые запросы, желательно связанные с пересылкой данных.

aat>Нужно это для того чтобы программно зажигать и гасить лампочку (не на сетевой карте) индикации работы сети.
aat>Как сделано...
aat>Есть загружаемый драйвер который может вкл или выкл лампочку. В нем перехватываются вызовы send() и recv() (sendto, recvfrom) — вроде работает, но многие программы (ftp, rcp...) этими вызовами не пользуются. Тогда я попробывал перехватывать read(), write(), ioctl() с проверкой являются ли дескрипторы в этих вызовах сокетами.Но сокет не обязательно имеет отношение тока к сети, поэтому в Х моя лампочка моргает как сумашедшая.

aat>Стека драйверов (как в виндах) в этих freeBSD нет, поэтому стандартно подцепиться к драйверу сетевой карты не получается, а менять код ядра или драйвера сетевой карты незя.


aat>Может кто знает как можно решить такую проблему. Вероятно можно сделать демона, который сможет работать напрямую с драйвером сетевой карты и с моим драйвером.


Написал бы версию что-ли? Как вариант, повесится на ipfw hook и смотреть имя интерфейса... если не lo0, мигать лампочкой .
Re: перехват сетевых обращений
От: raskolnikov  
Дата: 15.07.04 16:52
Оценка:
Eto tipa Linuxovskogo tleds?
Ja poiskal tleds && freebsd vot tut vrode
obeschajut koe chto pohozhee, mozhet pomozhet:

http://www.digitalkaos.net/linux/wmnet/

V uvazheniem.

V. Heinitz
Re[2]: перехват сетевых обращений
От: aat Россия  
Дата: 16.07.04 10:19
Оценка: :)
A>Написал бы версию что-ли? Как вариант, повесится на ipfw hook и смотреть имя интерфейса... если не lo0, мигать лампочкой .

Версия ядра, вроде, 2.2.5.1
Re: перехват сетевых обращений
От: aat Россия  
Дата: 19.07.04 12:06
Оценка:
Здравствуйте, aat, Вы писали:

aat>Такая вот задачка. Необходимо в freeBSD (старое ядро, оч древнее) реагировать на все сетевые запросы, желательно связанные с пересылкой данных.

aat>Нужно это для того чтобы программно зажигать и гасить лампочку (не на сетевой карте) индикации работы сети.
aat>Как сделано...
aat>Есть загружаемый драйвер который может вкл или выкл лампочку. В нем перехватываются вызовы send() и recv() (sendto, recvfrom) — вроде работает, но многие программы (ftp, rcp...) этими вызовами не пользуются. Тогда я попробывал перехватывать read(), write(), ioctl() с проверкой являются ли дескрипторы в этих вызовах сокетами.Но сокет не обязательно имеет отношение тока к сети, поэтому в Х моя лампочка моргает как сумашедшая.

aat>Стека драйверов (как в виндах) в этих freeBSD нет, поэтому стандартно подцепиться к драйверу сетевой карты не получается, а менять код ядра или драйвера сетевой карты незя.


aat>Может кто знает как можно решить такую проблему. Вероятно можно сделать демона, который сможет работать напрямую с драйвером сетевой карты и с моим драйвером.


extern struct ifnet *ifnet; — полный низкоуровневый контроль над сетью без ломки стандартных драйверов и ядра
Re: перехват сетевых обращений
От: citrin Россия http://citrin.ru/
Дата: 19.07.04 15:20
Оценка:
Здравствуйте, aat, Вы писали:

aat>Такая вот задачка. Необходимо в freeBSD (старое ядро, оч древнее) реагировать на все сетевые запросы, желательно связанные с пересылкой данных.

aat>Нужно это для того чтобы программно зажигать и гасить лампочку (не на сетевой карте) индикации работы сети.

А если через bpf сделать?
Re[2]: перехват сетевых обращений
От: aat Россия  
Дата: 20.07.04 06:06
Оценка:
Здравствуйте, citrin, Вы писали:


C>А если через bpf сделать?


bpf? what is it (это какое то устройство)?
Это работает в ядре или в пользовательском режиме?

Спасибо, посмотрю.
Re[2]: перехват сетевых обращений
От: Аноним  
Дата: 20.07.04 09:11
Оценка:
Здравствуйте, citrin, Вы писали:

C>А если через bpf сделать?

Дело в том, что bpf не гарантирует синхронности прохождения пакета и получения данных о нем запросившим приложением. BPF гарантирует лишь то, что пакет будет передан через bpf интерфейс запросившему его приложению с большой долей вероятноси (Теоретически возможны потери на BPF, но мне добиться такого ни разу не удалось). Соответственно, если требуется реалтайм реакция на передачу, то BPF не подходит.
Re[3]: перехват сетевых обращений
От: citrin Россия http://citrin.ru/
Дата: 20.07.04 13:18
Оценка:
> Дело в том, что bpf не гарантирует синхронности прохождения пакета и получения данных о нем запросившим приложением. BPF гарантирует лишь то, что пакет будет передан через bpf интерфейс запросившему его приложению с большой долей вероятноси (Теоретически возможны потери на BPF, но мне добиться такого ни разу не удалось). Соответственно, если требуется реалтайм реакция на передачу, то BPF не подходит.

Ну смотря для чего этот индикатор нужен. Если смотреть tcpdump (который во Фре через bpf работает) то на глаз задержкит почти не заметны. А потери идут только при большом трафике, что для индикатора не принципиально.
Posted via RSDN NNTP Server 1.9 beta
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.