printf(" Src Address\n");
for(i = 0;i < 4;i++)
printf(" %d ",((ip->ip_src.s_addr)&(0x0FF<<(i*8)))>>(i*8));
这显示o / p为127.0.0.0,因为我正在使用环回,但是当我使用相同的
执行相同的2显示以太网地址时for(i = 0;i <6; i++)
printf("dest ether:%c",((ethernet->ether_dhost)&(0x0FF<<(i*8)))>>(i*8));
我得到的错误是错误:二进制&amp;
的操作数无效这里u_char ether_dhost [6];存储ip地址的变量类型为unsigned long int ...如何显示以太网地址..
答案 0 :(得分:3)
s_addr
字段是一个32位整数,用于存储IPv4地址。在这上使用二进制&
运算符可以正常工作。 ether_dhost
字段OTOH是一个6字节的数组,您无法像s_addr
那样操作它。但话说回来,你不必:
for(i = 0; i < 6; i++)
printf(":%c"+!i, ethernet->ether_dhost[i]);
顺便提一下,您的IP地址代码比以前要复杂得多:
for(i = 0; i < 32; i += 8)
printf(".%d"+!i, (ip->ip_src.s_addr>>i)&0xff);
答案 1 :(得分:0)
如果您使用的是标准struct inet_addr
和struct ether_addr
,则可以使用标准功能。
printf("inet address: %s\n", inet_ntoa(…));
printf("ether address: %s\n", ether_ntoa(…));