The OpenNET Project / Index page

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

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

"Пример работы с raw-socket'ом"  
Сообщение от Susanin email(??) on 06-Фев-08, 15:43 
Добрый день.
У меня возникли проблемы с приемом и передачей пакета через raw-socket. Мне в проге нужно сформировать IP-пакет весте с заголовком и передать его через raw-socket, и соответственно потом принять его, остальные подробности задаче думаю не важны. Я уже 4 дня вдоль и попрек перерываю статьи, сообщения форума, но пока безрезультатно((
Если у кого есть работающий пример передачи пакета под FreeBSD, скиньте пожалуйста.
Заранее благодарен.
Высказать мнение | Ответить | Правка | Cообщить модератору

 Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "Пример работы с raw-socket'ом"  
Сообщение от stolik (ok) on 06-Фев-08, 16:40 
>Добрый день.
>У меня возникли проблемы с приемом и передачей пакета через raw-socket. Мне
>в проге нужно сформировать IP-пакет весте с заголовком и передать его
>через raw-socket, и соответственно потом принять его, остальные подробности задаче думаю
>не важны. Я уже 4 дня вдоль и попрек перерываю статьи,
>сообщения форума, но пока безрезультатно((
>Если у кого есть работающий пример передачи пакета под FreeBSD, скиньте пожалуйста.
>
>Заранее благодарен.

Не ясно в чем же все таки проблемма. Не знаю как во FreeBSD, но в Линуксе поступаем как обычно, заводим сокет, формируем пакет, и проталкиваем его в сокет. :)
В чем проблемма то

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

2. "Пример работы с raw-socket'ом"  
Сообщение от Susanin email(??) on 06-Фев-08, 16:58 
>Не ясно в чем же все таки проблемма. Не знаю как во
>FreeBSD, но в Линуксе поступаем как обычно, заводим сокет, формируем пакет,
>и проталкиваем его в сокет. :)
>В чем проблемма то

Принцип то ясен. Проблема в том, что Sendto() не отправляет пакет((
Может я что-то не так делаю. Поэтому и прошу скинуть уже проверенный пример, а дальше я думаю с без проблем разберусь. Если есть, скиньте пожалуйста

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

3. "Пример работы с raw-socket'ом"  
Сообщение от stolik (ok) on 06-Фев-08, 18:24 
>Принцип то ясен. Проблема в том, что Sendto() не отправляет пакет((
>Может я что-то не так делаю. Поэтому и прошу скинуть уже проверенный
>пример, а дальше я думаю с без проблем разберусь. Если есть,
>скиньте пожалуйста

Ну вот например в Линуксе, реально рабочий пример с пакетными сокетами. Разница в том, что для пакетного сокета вы формируете пакет полностью

if( (sd = socket(PF_PACKET, SOCK_RAW, htons(ETH_P_ALL))) < 0 )
{
  perror("socket()");
  exit(EXIT_FAILURE); //либо throw
}

......
//формируем пакет
......

if(ioctl(sd, SIOCGIFINDEX, &ifr) < 0)
{
  perror("ioctl()");
  close(sd);
}

s_ll.sll_family = AF_PACKET;
s_ll.sll_ifindex = ifr.ifr_ifru.ifru_ivalue;

/* в бесконечном цикле отправляем пакеты */
int Tsend = 3000;

while(1)
{
if(sendto(sd,sendpacket1,len_sendpacket1,0,(struct sockaddr*)&s_ll,sizeof(struct sockaddr_ll)) < 0)
{
   perror("sendto()");
}
usleep((Tsend));
}

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

4. "Пример работы с raw-socket'ом"  
Сообщение от Susanin email(??) on 07-Фев-08, 00:42 
Большое спасибо за помощь. И еще вот только хочу уточнить...
При формировании пакета нужно формировать только IP-заголовок, или заголовок канального уровня тоже (Ethernet-заголовок)?

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

5. "Пример работы с raw-socket'ом"  
Сообщение от jd2 (ok) on 08-Фев-08, 04:07 
В Линухе можно и так, и так. Во фре - наверняка тоже.
Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

6. "Пример работы с raw-socket'ом"  
Сообщение от stolik (ok) on 08-Фев-08, 10:33 
Для raw-сокетов достаточно формировать только ip-заголовок, для пакетных сокетов, надо делать весь пакет полностью, включая и ethernet заголовок.
Однако, если я не ошибаюсь, пакетные сокеты есть только в Линуксе.
Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

7. "Пример работы с raw-socket'ом"  
Сообщение от Susanin email(??) on 08-Фев-08, 12:41 
>Для raw-сокетов достаточно формировать только ip-заголовок, для пакетных сокетов, надо делать весь
>пакет полностью, включая и ethernet заголовок.
> Однако, если я не ошибаюсь, пакетные сокеты есть только в Линуксе.
>

Спасибо большое за помощь

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

8. "Пример работы с raw-socket'ом"  
Сообщение от L1ker email on 26-Мрт-09, 19:32 
Подскажите а как на фре собрать пакет включая ethrnet заголовок?
Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

Архив | Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Оцените тред (1=ужас, 5=супер)? [ 1 | 2 | 3 | 4 | 5 ] [Рекомендовать для помещения в FAQ]




Спонсоры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

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