@Sdelan_v_CCCP

В каком порядке байтов записан MAC адрес в ethernet пакета?

Всем привет! Меня интересует вопрос, стоит ли переводить MAC адрес, извлеченный из ethernet пакета из сетевого порядка в локальный порядок байтов? Или он записан как 6 отдельных однобайтовых чисел?

Спасибо за ответы. Я использую pcap. Код примерно такой

typedef unsigned short u16;

u16 extract_16bits(const void *p)
{
    return ((u16)ntohs(*(const u16 *)(p)));
}
void callback(u_char *args, const struct pcap_pkthdr* pkthdr, const u_char* packet)
{
     int data_offset = 12; //DMAC + SMAC
     u16 etype = extract_16bits(packet + data_offset);
       ....
}
void main(void) 
{
      ...
      pcap_loop(descr, -1, callback, NULL);
      ...
}


Меня интересует тот момент, при извлечении mac адреса из packet, нужно ли выполнять что то вроде ntoh к mac адресу
  • Вопрос задан
  • 2920 просмотров
Решения вопроса 1
@throughtheether
human after all
Или он записан как 6 отдельных однобайтовых чисел?

Цитата из стандарта IEEE 802.3-2008 section 1 (3.2.3 Address fields):
a) Each address field shall be 48 bits in length.
...
d) Each octet of each address field shall be transmitted least significant bit first.

UPD:
Наверное, стоит пояснить. Адрес 12:34:56:78:9a:bc будет передан слева направо (сначала первый слева байт, потом второй и т.д.), при этом биты байта будут переданы в порядке "LSB передается первым". То есть, байт 12 будет на проводе выглядеть так (слева направо "время" возрастает): 01001000. Как это соотносится с вашим кодом, не видя его, трудно судить.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
А какой тип данных Вы используете для локального порядка байтов ?
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы