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.
怎么样:
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)
我认为最好的方法是使用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)