ARP & RAW_SOCKET, dmitry, 15-Авг-03, 00:14 [смотреть все]Вопрос, конечно, дурацкий... Нужно сделать запрос 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
|
- ARP & RAW_SOCKET, Dvorkin, 12:34 , 15-Авг-03 (1)
>Вопрос, конечно, дурацкий... >Нужно сделать запрос 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
- ARP & RAW_SOCKET, qq, 18:45 , 15-Авг-03 (2)
вот ты передаешь буффер в sendto, это будет полный пакет ethernet, начиная с destination mac
|