Пишу биллинговую систему реального времени
с пом. Libcap под FreeBSD 5.2.1.
Создаю для теста фильтр "ip proto icmp".
Вызываю pcap_loop:
...........
pcap_loop(handle, -1, callback, NULL);
...........
void callback(...){
printf("test\n");
}
...........
По идее при пинге этого хоста должны распечатываться строки "test".
Но нет этого. Почему?
Функции pcap_lookupdev, pcap_open_live, pcap_compile, pcap_setfilter
ошибок не возвращают.
Прошу прощения, строки распечатываются. Но через
какой-то промежуток времени после начала пинга!
Мне нужно в реальном времени отслеживать каждый пакет.Да, и еще: я новичек в никсах,
это должно работать при настроенном NAT-е?
Это сервер доступа к интернет в локалке.Или, может, посоветуете другой способ слежения трафика?
>Прошу прощения, строки распечатываются. Но через
>какой-то промежуток времени после начала пинга!
>Мне нужно в реальном времени отслеживать каждый пакет.
>
>Да, и еще: я новичек в никсах,
>это должно работать при настроенном NAT-е?
>Это сервер доступа к интернет в локалке.
>
>Или, может, посоветуете другой способ слежения трафика?в реальном времени ничего у тебя не выйдет, задержки все равно будут )) Да и FreeBSD - не real-time OS :))
А вообще если по делу.... коль конкретно FreeBSD, то зачем PCAP ???
В FreeBSD есть прекрасная вещь, которая называется Berkeley Packet Filter, просто man bpf.P.S.: PCAP через него и работает ...
"Реального времени"- я имел в виду: пришел пакет на интерфейс,
я его сразу анализирею, логирую и принимаю решение, что с ним дальше делать.
Все это до обработки системой. Т.е. чтоб была возможность
запрещать пакеты и разрешать их в программе.
Я писал такую штуку под Win2000, пришлось писать свой драйвер.
Здесь, как я понял, легче.
Но так как я не профи в никсах вообще, не знаю, какой метод
(и какие есть вообще) лучше выбрать.
>"Реального времени"- я имел в виду: пришел пакет на интерфейс,
>я его сразу анализирею, логирую и принимаю решение, что с ним дальше
>делать.
>Все это до обработки системой. Т.е. чтоб была возможность
>запрещать пакеты и разрешать их в программе.
>Я писал такую штуку под Win2000, пришлось писать свой драйвер.
>Здесь, как я понял, легчеЕсли Вы внимательно читали про libpcap, в возможности этой библиотеки не входит разрешение/запрещение пакетов, для этого есть firewall.
>Но так как я не профи в никсах вообще, не знаю, какой
>метод
>(и какие есть вообще) лучше выбрать.IPFW (FreeBSD only), IPF (cross-platformed)
если нужно пропускать через себя пакеты (хотя имхо, это не правильно) , то можно встраивать себя в ipfw divert
>Прошу прощения, строки распечатываются. Но через
>какой-то промежуток времени после начала пинга!
>Мне нужно в реальном времени отслеживать каждый пакет.
>
>Да, и еще: я новичек в никсах,
>это должно работать при настроенном NAT-е?
>Это сервер доступа к интернет в локалке.
>
>Или, может, посоветуете другой способ слежения трафика?
если конкретно в FreeBSD то лучше PF_HOOK если это для версий > 5 если для всех версии а точнее и для 4 то посмотрите в сторону netgraph'a
>Пишу биллинговую систему реального времени
>с пом. Libcap под FreeBSD 5.2.1.
>Создаю для теста фильтр "ip proto icmp".
>Вызываю pcap_loop:
>...........
>pcap_loop(handle, -1, callback, NULL);
>...........
>void callback(...){
> printf("test\n");
>}
>...........
>По идее при пинге этого хоста должны распечатываться строки "test".
>Но нет этого. Почему?
>Функции pcap_lookupdev, pcap_open_live, pcap_compile, pcap_setfilter
>ошибок не возвращают.почитайте внимательнее про pcap_open_live,pcap_dispatch ;-)
P.S. Пишу что-то подобное, но громким именем билинга не называю ;-)
см www.inlan.ru/wiki/ipcount, может объеденим усилия ?
Предыдущая версия у меня работала на BSD, но щас все переориентировал на Linux - просто BSD под рукой нет.
Не, я пишу по FreeBSD.
"но громким именем билинга не называю ;-)"- так я планирую
сделать биллинг :))