0
我与PCAP库工作,我试图捕捉源和目的IP地址,但它似乎是给了我完全随机的结果:组in_addr随机结果
这里是我的结构:
struct sniff_ip {
u_char ip_vhl;
u_char ip_tos;
u_short ip_len;
u_short ip_id;
u_short ip_off;
u_char ip_ttl;
u_char ip_p;
u_short ip_sum;
struct in_addr ip_src, ip_dst;
};
下面是一个使用该结构的相关代码:
void print_payload(u_char *arg, const struct pcap_pkthdr *pkthdr, const u_char *packet)
{
const struct sniff_ip *ip;
int i=0;
static int count=0;
ip = (struct sniff_ip*)(packet + SIZE_ETHERNET);
printf("Source [%s] - Destination [%s]\n", inet_ntoa(ip->ip_src), inet_ntoa(ip->ip_dst));
printf("Payload:\n");
for(i=0; i<pkthdr->len; i++)
{
if(isprint(packet[i]))
printf("%c", packet[i]);
else
printf(".", packet[i]);
if((i%16 == 0 && i != 0) || (i== pkthdr->len-1))
printf("\n");
}
}
输出是:
Source [207.117.127.0] - Destination [207.117.127.0]
Payload:
................E
..<[email protected]@..u.....
[email protected]
[email protected]
1\.........
Source [60.190.127.0] - Destination [60.190.127.0]
Payload:
................E
..([email protected]@.<......
[email protected]
...wN..
IP地址似乎是完全随机的,不是我的。预期的输出将显示我自己的IP来源和目标,因为我正在通过连接到自己来测试它。我在端口23上运行它,以避免任何其他数据干扰。
编辑:我得到它的工作,出于某种原因,我必须telnet到“eth0”,而不是“本地”,它的工作。但是,一旦我将端口更改为更有用的端口,如端口80,它工作正常。我不确定端口23为什么不同,但是很好。
啊,是的,你说得对。尽管我将它们移到了自己的行中,但现在它提供了两个不同的IP: 来源[60.190.127.0]目标[0.1.127.0] – zoite 2012-01-27 12:07:31
使用'inet_ntop'的更多原因。 – 2012-01-27 13:38:23
或者最好''getnameinfo'带'NI_NUMERICHOST',这样你就不必在任何地址内部戳。 – 2012-01-27 13:49:33