The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  ВХОД  слежка  RSS
"Raw socket под FreeBSD"
Вариант для распечатки Архивированная нить - только для чтения! 
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [Проследить за развитием треда]

"Raw socket под FreeBSD"
Сообщение от dmitrij_b emailИскать по авторуВ закладки on 10-Мрт-03, 13:03  (MSK)
Люди! Помогите! Уже неделю маюсь.
Задача такая: нужна программа, которая реально может читать из RAW сокета,
то что ниже - сокет открывает, бинд выполняет, и ждет (бедная) пакеты, пока Ctrl-C не нажму.

Где собака зарыта?

Или каким другим другим способом получть необработанные пакеты (хоть прямо с Ethernet интерфейса)

#include <sys/types.h>
#include <sys/socket.h>
#include <sys/uio.h>
#include <netinet/in.h>
#include <netinet/in_systm.h>
#include <netinet/ip.h>
#include <string.h>
#include <stdio.h>
#include <unistd.h>

#define MAX_PACKET_SIZE 1024*4

int main()
{

  char buf[MAX_PACKET_SIZE];
  struct sockaddr_in fromaddr;
  struct sockaddr_in sa;
  int readlen;
  unsigned int fromlen;

  int fd;

  fd=socket(PF_INET, SOCK_RAW, IPPROTO_RAW);
  if (fd<0)
  {
    perror("open");
exit(-1);
  }

  memset(&sa, 0, sizeof(sa));

  sa.sin_family = AF_INET;
  sa.sin_addr.s_addr = INADDR_ANY;
  sa.sin_port = htons(0);
  
  if ( bind(fd, (struct sockaddr *)&sa, sizeof(sa)) == 0)
  {
    printf("bind divert socket: %d\n", fd);
  }

  for (;;)
  {
    fromlen = sizeof(struct sockaddr_in);
    readlen = recvfrom(fd, buf, MAX_PACKET_SIZE, 0, (struct sockaddr *) &fromaddr, &fromlen);
    printf("got packet of %i bytes\n", readlen);
  }
}

  Рекомендовать в FAQ | Cообщить модератору | Наверх

 Оглавление

Индекс форумов | Темы | Пред. тема | След. тема
Сообщения по теме

1. "Raw socket под FreeBSD"
Сообщение от SergeiZz Искать по авторуВ закладки on 12-Мрт-03, 18:08  (MSK)
>Где собака зарыта?

Совсем не уверен и FreeBSD далеко, что бы проверить, но мне не
нравятся размер пакета (4K) и порт 0 в sa.sin_port= 0.

  Рекомендовать в FAQ | Cообщить модератору | Наверх

2. "Raw socket под FreeBSD"
Сообщение от dmitrij_b emailИскать по авторуВ закладки on 12-Мрт-03, 18:20  (MSK)
>Совсем не уверен и FreeBSD далеко, что бы проверить, но мне не
>нравятся размер пакета (4K) и порт 0 в sa.sin_port= 0.

Дак ведь в том то и дело, что нужны пакеты, приходящие на любой порт.
А размер - дак ведь это размер буфера. По моему тут лучше переборщить...
Хотя больше чем 1500 на езернете быть не должно конечно.

  Рекомендовать в FAQ | Cообщить модератору | Наверх

3. "Raw socket под FreeBSD"
Сообщение от SergeiZz Искать по авторуВ закладки on 12-Мрт-03, 18:33  (MSK)
>Дак ведь в том то и дело, что нужны пакеты, приходящие на
>любой порт.
>А размер - дак ведь это размер буфера. По моему тут лучше
>переборщить...
>Хотя больше чем 1500 на езернете быть не должно конечно.

А как проверяется работоспособность этого кода?

  Рекомендовать в FAQ | Cообщить модератору | Наверх

6. "Raw socket под FreeBSD"
Сообщение от dmitrij_b emailИскать по авторуВ закладки on 12-Мрт-03, 21:36  (MSK)
>А как проверяется работоспособность этого кода?

В том-то и фишка, что ни как. Этот код под фрей не работает. Замирает на recvfrom, и ждет пакет, и ждет ..... :-(

  Рекомендовать в FAQ | Cообщить модератору | Наверх

4. "Raw socket под FreeBSD"
Сообщение от Ункновн Искать по авторуВ закладки on 12-Мрт-03, 19:18  (MSK)
Черт возьми... Не понятно, что ты хочешь сделать. Все пакеты с сети ч\з хаб сливать? - ставь сетевуху в неразборчивый интерфейс, и она будет все пакеты принимать... или тебе что-то другое надо. Исходники других людей смотреть надо! Большинство софтин вообще-то конектиться к определенному порту... дык поэтому на нулевой ничего не приходит. -) (совет смотреть исходники\примеры написания сниферов под *никс лайк системы -)
  Рекомендовать в FAQ | Cообщить модератору | Наверх

5. "Raw socket под FreeBSD"
Сообщение от dmitrij_b emailИскать по авторуВ закладки on 12-Мрт-03, 21:34  (MSK)
>Черт возьми... Не понятно, что ты хочешь сделать. Все пакеты с сети
>ч\з хаб сливать?

  Если грубо, то именно этого и хочу (тонкости в данном случае не существенны)

> - ставь сетевуху в неразборчивый интерфейс, и она
>будет все пакеты принимать... или тебе что-то другое надо.

  Дак сетевуха-то принимает - только recvfrom молчит, как партизан, блин. :-)

> Исходники других людей смотреть надо!

  Смотрел, смотрю ...
  В начале обсуждения исходник не из головы придуманый, а с этого сайта выкопанный - только под Linux. Потому и не работает без адаптации - а как адаптировать пока не допер.
  В принципе конкретную задачу я уже в первом приближении решил - через PCAP, но тут уже вопрос азарта - как это через сокеты сделать.  
  Ткните мне плиз пальцем в исходник для FreeBSD, который будет работать, а то я уже ядро шерстить начал. :-)

> Большинство софтин вообще-то конектиться к определенному порту... дык
>поэтому на нулевой ничего не приходит. -)

  А я то по наивности своей считал, что если ADDR_ANY = 0.0.0.0, то
PORT_ANY = 0. :-)

> (совет смотреть исходники\примеры написания сниферов под *никс лайк системы -)

  Нашел кстати весьма неплохой примерчик, с помощью которого дело и продвинулось, но ссылка на работе осталась. Если интересно - завтра выложу. Только там все по французски - но си он и во Франции си.

  Рекомендовать в FAQ | Cообщить модератору | Наверх

7. "Raw socket под FreeBSD"
Сообщение от Ункновн Искать по авторуВ закладки on 13-Мрт-03, 17:43  (MSK)
>  Дак сетевуха-то принимает - только recvfrom молчит, как партизан, блин.

гы--. ресивфром с конкреткного сокета принимать пытаеться, что-то мне кажется, что там просто recv надо юзать.

>  В начале обсуждения исходник не из головы придуманый, а с
>  этого сайта выкопанный - только под Linux. Потому и не работает
>  без адаптации - а как адаптировать пока не допер.

Интересно... даже странно -)

>  В принципе конкретную задачу я уже в первом приближении решил
>- через PCAP, но тут уже вопрос азарта - как это
>через сокеты сделать.
>  Ткните мне плиз пальцем в исходник для FreeBSD, который будет
>работать, а то я уже ядро шерстить начал. :-)

...ядро шерстить тяжело. Исходник посмотрю, где-то дома на каком-то компакте куча всякой подобной вещи было.

>= 0.0.0.0, то
>PORT_ANY = 0. :-)

оно почти то так, но только для дефаул сокетов. Я когда ICMP ч\з raw писал, то наткнулся на эту проблему. (правда софтина под винды была, и на winsocketax естессно) -).

> Нашел кстати весьма неплохой примерчик, с помощью которого дело и
> продвинулось, но ссылка на работе осталась. Если интересно - завтра
> выложу.
> Только там все по французски - но си он и во
> Франции си.

Выкладывай. Интересно посмотреть будет... может что-то новенькое там ;)
Как адаптация Linuxovix sources прошла? Кстати, на какой сети ты тестишь свой софт.? как проверяешь софтину, шлеш на тачку пинг? -))))

  Рекомендовать в FAQ | Cообщить модератору | Наверх

9. "Raw socket под FreeBSD"
Сообщение от dmitrij_b emailИскать по авторуВ закладки on 16-Мрт-03, 19:59  (MSK)
>>  Дак сетевуха-то принимает - только recvfrom молчит, как партизан, блин.
>
>гы--. ресивфром с конкреткного сокета принимать пытаеться, что-то мне кажется, что там
>просто recv надо юзать.
>

и recv пробовал, и даже read-ом пытался. Результат одинаковый = 0 :-(

>...ядро шерстить тяжело. Исходник посмотрю, где-то дома на каком-то компакте куча всякой
>подобной вещи было.

  Это может быть интересным.

>> Нашел кстати весьма неплохой примерчик, с помощью которого дело и
>> продвинулось, но ссылка на работе осталась. Если интересно - завтра
>> выложу.
>> Только там все по французски - но си он и во
>> Франции си.
>
>Выкладывай. Интересно посмотреть будет... может что-то новенькое там ;)

  Новенького наверное не много, но не мне судить. Вот оно:
  http://www.minithins.net/papers/sniff.txt

> Как адаптация Linuxovix sources прошла?

  Это дело я пока бросил. Чуть попозже может займусь.

>  Кстати, на какой сети ты тестишь свой софт.? как проверяешь софтину,
> шлеш на тачку пинг? -))))

  Экспериминтирую на роутере - днем порядка 20 машин в инет лезут, так-что дополнительно ничего слать не приходится :-).

  Если интересно могу положить свой исходник (~8kb) - он осуществляет захват и простейший анализ пакетов. (сборная солянка из трех программ, плюс немного моего творчества).

  Рекомендовать в FAQ | Cообщить модератору | Наверх

8. "Raw socket под FreeBSD"
Сообщение от Parish Искать по авторуВ закладки on 13-Мрт-03, 21:14  (MSK)
man bpf
  Рекомендовать в FAQ | Cообщить модератору | Наверх

10. "Raw socket под FreeBSD"
Сообщение от poige emailИскать по авторуВ закладки on 17-Мрт-03, 12:43  (MSK)
http://www.opennet.ru/docs/FAQ/network/raw-ip-faq.html

/poige
--
http://www.morning.ru/~poige/

  Рекомендовать в FAQ | Cообщить модератору | Наверх


Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Пожалуйста, прежде чем написать сообщение, ознакомьтесь с данными рекомендациями.




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру