>Вопрос, конечно, дурацкий...
>Нужно сделать запрос RARP.
>Я знаю формат ip пакета для ARP/RARP. Знаю, что создать сокет надо
>SOCK_RAW и указать IPPROTO_RAW.
>делаю это так:
>fd = socket( PF_INET, SOCK_RAW, IPPROTO_RAW);
>char packet[72];
>sockaddr_in addr;
>memset( packet, 0, 72);
>// формирую пакет
>....
>sendto( fd, packet, 72, 0, ( sockaddr *)&addr, sizeof( addr));
>
>теперь вопрос к знатокам:
>1) какой addr делать?
>2) в packet должен быть полностью ip-пакет или только его RARP-часть?
>(писать ли вначале приемник, передатчик, тип?)
>
>WBR, Dvorkin
Вопрос был задан некорректно - простите, было поздновато...
Перефразирую.
Вот я открыл SOCK_RAW.
Для отправки RARP - запроса нужно сформировать Ethernet-кадр вида:
MAC передатчика, MAC приемника, тип пакета(езернет заголовок) + RARP-данные. SOCK_RAW позволяет ли мне указать MAC получателя в заголовке Ethernet, или сетевая подсистема подставляет его сама на основе sockaddr? Если так, то чем надо пользоваться для самостоятельного формирования полного Ethernet-пакета? А может лучше формировать Multicast адрес получателя?
WBR, Dvorkin
|