我正在尝试比较这两个字符指针中的值,但我得到了奇怪的输出:
第一个是(libpcap IP 地址):
const char* ip_source = inet_ntop(AF_INET, &ip->ip_src, buffer1, sizeof(buffer1)); //192.168.56.1
第二个是:
char *host_ip = inet_ntoa(((struct sockaddr_in*)a->addr)->sin_addr); //192.168.56.1
我尝试过使用 if (*ip_source == *host_ip)
、if (strcmp(ip_source, host_ip) == 0)
和 if ( strncmp(ip_source,host_ip,strlen(host_ip))
。
如何比较这两个变量中存储的 IP 地址,看看两个 IP 地址是否相同?
这是代码:
if (strncmp(ip_source, host_ip, strlen(host_ip)) == 0) // if sent local > remote
{
printf(" RST/ACK Detected [Local > Remote]\n");
}
else // if sent remote > local
{
printf(" RST/ACK Detected [Remote > Local]\n");
}
这是结果:
Packet number 2386:
current time: 2015-04-11 15:07:59.412
From(src): 192.168.56.1 <---- Local (IP stored in *host_ip)
To(dst): 192.168.56.2 <---- Remote
Protocol: TCP
Src port: 1864
Dst port: 49750
Seq Num: 0
Ack Num: 3556812524
RST/ACK Detected [Remote > Local] <--- Wrong
在本例中,它返回 -2
最佳答案
第一个只会比较每个字符的第一个字符,而 strcmp 看起来对我来说是正确的。一个是 const 而另一个不是 const 应该没有关系。
关于比较 Const char* 和 char *,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29578640/