Модераторы: xvr
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Отправить пакет с интерфейса без ip-адреса, На интерфейсе отсутствует ip-адрес 
V
    Опции темы
konshyn
Дата 11.2.2014, 19:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 295
Регистрация: 19.9.2013

Репутация: нет
Всего: нет



Доброго вечера.

Есть несколько вопросов, на которые я пока что не смог найти ответ.

Есть сетевой интерфейс. У него есть свой mac-адрес, но отсутствует ip-адрес (это обязательное условие). Карточка подключена кабелем напрямую к другой карточке (к другому компу). Как можно отправить свои созданные пакеты с этого интерфейса, просто отправить в никуда, к примеру широковещательный(вообще желательно широковещательный, т.е. dest mac-адрес FF:FF:FF:FF:FF:FF). 
И как можно принимать пакеты с такого же интерфеса (без ip-адреса).

Вот то, что я пытался сделать (вкратце):
Код

int sock
sock = socket(PF_PACKET, SOCK_RAW, htons(ETH_P_ALL));
 
дальше формировал пакет(ethernet-frame). вот такой он получился (по байтам в 16 с/с):
FF FF FF FF FF FF 64 66 B3 01 80 DD 08 00 45 00 00 20 00 00 00 00 FF 11 05 74 C0 A8 01 84 AD C2 46 6A 13 56 13 56 00 0C 5A F7 54 65 73 74

FF FF FF FF FF FF - destination mac-адрес
64 66 B3 01 80 DD - source mac-адрес
08 00 - означает, что в eth-фрейм вложен ip пакет.
45 - первая цифра - версия ip-протокола, вторая цифра - размер ip-заголовка в байтах.
00 - то, что не имеет значение в данном случае (тип службы и что-то еще)
00 20 - размер ip-пакета (без eth-заголовка) в байтах, вместе с ip-заголовком. 0x20 = 32 байта. 20 байт заголовок ip, 8 байт заголовок udp, 4 байта - данные.
00 00 - идентификатор пакета
00 00 - флаги/смещение
FF - время жизни
11 - номер вложенного протокола, в данном случае - UDP
05 74 - контрольная сумма ip-заголовка
C0 A8 01 84 - source ip-адрес (192.168.1.132)
AD C2 46 6A - dest ip-адрес (173.194.70.106)
13 56 - порт отправителя
13 56 - порт получателя
00 0C - длина датаграммы
5A F7 - контрольная сумма udp
54 65 73 74 - собственно данные  - слово "T e s t" (без пробелов)

заполняю структуру
Код

struct sockaddr_ll s_ll;
memset(&s_ll, 0, sizeof(s_ll));
s_ll.sll_ifindex = 0; // в моем случае индекс интерфейса = 0
s_ll.sll_family = AF_PACKET;
memcpy(s_ll.sll_addr, source_mac, 6);  //source_addr содержит FF:FF:FF:FF:FF:FF
s_ll.sll_halen = htons(6); 

//и отправляю
send_bytes = sendto(sock, buff, length_buff, (struct sockaddr *)&s_ll, sizeof(s_ll));


perror выводит ошибку: sendto() failed: Network is down

И еще раз напишу, а то к концу прочтения можно забыть, что у меня не получается:
Есть сетевой интерфейс. У него есть свой mac-адрес, но отсутствует ip-адрес (это обязательное условие). Карточка подключена кабелем напрямую к другой карточке (к другому компу). Как можно отправить свои созданные пакеты с этого интерфейса, просто отправить в никуда, к примеру широковещательный(вообще желательно широковещательный, т.е. dest mac-адрес FF:FF:FF:FF:FF:FF). 
И как можно принимать пакеты с такого же интерфеса (без ip-адреса).

Если кто-то знает или есть догадки, как это можно сделать, поделитесь, пожалуйста.

P.S. Если светофор, который описывает побайтово пакет, напрягает кого-то, напишите - исправлю. Спасибо


--------------------
«Потому что ценность акта действия в этой стране возрастает в несколько раз».
PM MAIL Skype   Вверх
tzirechnoy
Дата 11.2.2014, 21:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1173
Регистрация: 30.1.2009

Репутация: 3
Всего: 16



А что говорит на этот интэрфейс ip link ?
PM MAIL   Вверх
tzirechnoy
Дата 11.2.2014, 22:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1173
Регистрация: 30.1.2009

Репутация: 3
Всего: 16



Да что там, собственно. Чтобы отправлять пакеты через AF_PACKET, SOCK_RAW -- не требуется ip-адрес, но интэрфейс должэн быть UP.
PM MAIL   Вверх
konshyn
Дата 12.2.2014, 08:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 295
Регистрация: 19.9.2013

Репутация: нет
Всего: нет



Цитата(tzirechnoy @  11.2.2014,  21:14 Найти цитируемый пост)
А что говорит на этот интэрфейс ip link ? 


Он как раз говорил о том, что state DOWN

Цитата(tzirechnoy @  11.2.2014,  22:01 Найти цитируемый пост)
Да что там, собственно. Чтобы отправлять пакеты через AF_PACKET, SOCK_RAW -- не требуется ip-адрес, но интэрфейс должэн быть UP. 


Вы правы, сработало. Спасибо


UPD: Но теперь другая проблема. Wireshark видит, что пакет отправляется. А на другой машине, wireshark не видит этот пакет.

UPD2: Все видит. Это я в своих интерфейсах запутался. Утро:(

tzirechnoy, Спасибо  smile

Это сообщение отредактировал(а) konshyn - 12.2.2014, 10:08


--------------------
«Потому что ценность акта действия в этой стране возрастает в несколько раз».
PM MAIL Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С/С++: Программирование под Unix/Linux"
xvr
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой "Код".
  • Вопросы мобильной разработки тут
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, xvr.

 
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Программирование под Unix/Linux | Следующая тема »


 




[ Время генерации скрипта: 0.0700 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.