【发布时间】:2011-07-08 07:58:28
【问题描述】:
在这段代码的 sn-p 中,我捕获了数据包,并尝试使用 inet_ntoa 显示源地址和目标地址,甚至在此之前我以十六进制格式打印数据包 src 和 dst 地址。这里的问题是两者都不匹配,inet_ntoa的o/p错误如o/p所示
the src ip address should be 172.28.6.87 but inet_ntoa shows 86.212.172.28
the src ip address should be 172.28.6.110 but inet_ntoa shows 6.87.172.28
char *ptr = NULL;
ptr_fltr = (struct packet_filter*)(packet);
memcpy(out_data,packet,50);
printf("\n");
for(i= 28;i<36;i++)
printf("%#x\t",out_data[i]);
printf("*******************************************************************\n");
printf("---------------------Received Packet Info--------------------\n");
ptr = inet_ntoa(ptr_fltr->ip.ip_src);
printf("Source Ip Addr :%s\n",ptr);
这里
struct packet_filter
{
struct mac_filter mac;
struct ip_filter ip;
union {
struct udp_filter proto;
}protocol;
}__attribute__((packed));
struct ip_filter
{
u_char ip_vhl;
u_char ip_tos; /* type of service */
u_short ip_len; /* total length */
u_short ip_id; /* identification */
u_short ip_off; /* fragment offset field */
u_char ip_ttl; /* time to live */
u_char ip_p; /* protocol */
u_short ip_sum; /* checksum */
struct in_addr ip_src; /* source and dest address */
struct in_addr ip_dst; /* source and dest address */
}__attribute__((packed));
输出
0xac 0x1c 0x6 0x57 0xac 0x1c 0x6 0x6e
************************************************************
--------------------Received Packet Info--------------------
Source Ip Addr :86.212.172.28
Destination Ip Addr :6.87.172.28
【问题讨论】:
-
只是一个问题:为什么不使用libpcap?
标签: c