将以太网地址转换为可读形式?

Man*_*anu 1 c

struct ethernet_header
{
    u_char ether_dhost[ ETHER_ADDR_LEN];

    u_char ether_shost[ETHER_ADDR_LEN];

    u_short ether_type;
};

for(i = 0;i <6; i++)
  printf("dest ether:%x",ethernet->ether_dhost);
Run Code Online (Sandbox Code Playgroud)

如何在每个字节后以适当的可读形式打印以太网地址?我得到的o/p是十六进制的.这里以太网是指向结构的指针ethernet_header.

caf*_*caf 5

怎么样:

printf("%02x:%02x:%02x:%02x:%02x:%02x",
    (unsigned)ethernet->ether_dhost[0],
    (unsigned)ethernet->ether_dhost[1],
    (unsigned)ethernet->ether_dhost[2],
    (unsigned)ethernet->ether_dhost[3],
    (unsigned)ethernet->ether_dhost[4],
    (unsigned)ethernet->ether_dhost[5]);
Run Code Online (Sandbox Code Playgroud)


Joe*_*Boo 5

我认为最好的方法是使用ether_ntoa(),它几乎可用于任何*nix操作系统(在net/ethernet.h中可用).以下对我来说效果很好.

char *addr;
struct ether_addr host;

memcpy(&host, ethernet->ether_dhost, sizeof(host));
addr = ether_ntoa(&host);
Run Code Online (Sandbox Code Playgroud)