Есть несколько возможных причин.
Различные типы интерфейса
Одна возможность: ifconfig
делегирует печать аппаратного адреса реализации интерфейса. Фактическая печать выполняется функцией в структуре interface
для определенного интерфейса в net-tools-1.60
(отсюда), вызываемой lib/interface.c
, строка 678:
printf(_("HWaddr %s "), hw->print(ptr->hwaddr));
Посмотрите исходный код для nettools-1.60
в lib/hw.c
для списка поддерживаемых типов интерфейса: Есть отдельные реализации для Ethernet, Fibre, Token Ring и т.д.
Теперь к фактической функции печати: Пример: lib/ether.c
:
/* Display an Ethernet address in readable format. */
static char *pr_ether(unsigned char *ptr)
{
static char buff[64];
snprintf(buff, sizeof(buff), "%02X:%02X:%02X:%02X:%02X:%02X",
(ptr[0] & 0377), (ptr[1] & 0377), (ptr[2] & 0377),
(ptr[3] & 0377), (ptr[4] & 0377), (ptr[5] & 0377)
);
return (buff);
}
Различные типы сетевых интерфейсов могут быть реализованы для отображения информации одного и того же вида по-разному, используя вместо этого строчные x
s в строке форматирования (то есть %02x
вместо %02X
). Например, интерфейс IrDA использует шестнадцатеричные цифры в нижнем регистре (lib/irda.c
):
/*
* Function irda_print (ptr)
*
* Print hardware address of interface
*
*/
static char *irda_print(unsigned char *ptr)
{
static char buff[8];
sprintf(&buff[strlen(buff)], "%02x:%02x:%02x:%02x", ptr[3], ptr[2],
ptr[1], ptr[0]);
return (buff);
}
Патчи к ifconfig
Другая возможность, и, вероятно, причина здесь: дистрибутивы часто меняют программные пакеты. Приведенный выше фрагмент кода взят из оригинального net-tools-1.60
, давайте посмотрим на Debian, точнее, его патч net-tools-1.60-23.diff
(отсюда):
+--- net-tools.orig/lib/ether.c
++++ net-tools/lib/ether.c
[...]
+@@ -39,7 +39,7 @@ static char *pr_ether(unsigned char *ptr
+ {
+ static char buff[64];
+
+- snprintf(buff, sizeof(buff), "%02X:%02X:%02X:%02X:%02X:%02X",
++ snprintf(buff, sizeof(buff), "%02x:%02x:%02x:%02x:%02x:%02x",
+ (ptr[0] & 0377), (ptr[1] & 0377), (ptr[2] & 0377),
+ (ptr[3] & 0377), (ptr[4] & 0377), (ptr[5] & 0377)
+ );
Поэтому Debian пропатчил исходный код ifconfig
для их распространения, что также может быть подхвачено Ubuntu (Википедия: « Пакеты Ubuntu основаны на пакетах из нестабильной ветки Debian »).