|
|
|
@ -715,62 +715,62 @@ char *PcapLiveGetDevice(int number) {
|
|
|
|
|
|
|
|
|
|
void PcapTranslateIPToDevice(char *pcap_dev, size_t len)
|
|
|
|
|
{
|
|
|
|
|
char errbuf[PCAP_ERRBUF_SIZE];
|
|
|
|
|
pcap_if_t *alldevsp = NULL;
|
|
|
|
|
pcap_if_t *devsp = NULL;
|
|
|
|
|
|
|
|
|
|
struct addrinfo aiHints;
|
|
|
|
|
struct addrinfo *aiList = NULL;
|
|
|
|
|
int retVal = 0;
|
|
|
|
|
|
|
|
|
|
memset(&aiHints, 0, sizeof(aiHints));
|
|
|
|
|
aiHints.ai_family = AF_UNSPEC;
|
|
|
|
|
aiHints.ai_flags = AI_NUMERICHOST;
|
|
|
|
|
|
|
|
|
|
/* try to translate IP */
|
|
|
|
|
if ((retVal = getaddrinfo(pcap_dev, NULL, &aiHints, &aiList)) != 0) {
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (pcap_findalldevs(&alldevsp, errbuf)) {
|
|
|
|
|
freeaddrinfo(aiList);
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
for (devsp = alldevsp; devsp ; devsp = devsp->next) {
|
|
|
|
|
pcap_addr_t *ip = NULL;
|
|
|
|
|
|
|
|
|
|
for (ip = devsp->addresses; ip ; ip = ip->next) {
|
|
|
|
|
|
|
|
|
|
if (aiList->ai_family != ip->addr->sa_family) {
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (ip->addr->sa_family == AF_INET) {
|
|
|
|
|
if (memcmp(&((struct sockaddr_in*)aiList->ai_addr)->sin_addr, &((struct sockaddr_in*)ip->addr)->sin_addr, sizeof(struct in_addr))) {
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
} else if (ip->addr->sa_family == AF_INET6) {
|
|
|
|
|
if (memcmp(&((struct sockaddr_in6*)aiList->ai_addr)->sin6_addr, &((struct sockaddr_in6*)ip->addr)->sin6_addr, sizeof(struct in6_addr))) {
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
} else {
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
freeaddrinfo(aiList);
|
|
|
|
|
|
|
|
|
|
memset(pcap_dev, 0, len);
|
|
|
|
|
strlcpy(pcap_dev, devsp->name, len);
|
|
|
|
|
|
|
|
|
|
pcap_freealldevs(alldevsp);
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
freeaddrinfo(aiList);
|
|
|
|
|
|
|
|
|
|
pcap_freealldevs(alldevsp);
|
|
|
|
|
char errbuf[PCAP_ERRBUF_SIZE];
|
|
|
|
|
pcap_if_t *alldevsp = NULL;
|
|
|
|
|
pcap_if_t *devsp = NULL;
|
|
|
|
|
|
|
|
|
|
struct addrinfo aiHints;
|
|
|
|
|
struct addrinfo *aiList = NULL;
|
|
|
|
|
int retVal = 0;
|
|
|
|
|
|
|
|
|
|
memset(&aiHints, 0, sizeof(aiHints));
|
|
|
|
|
aiHints.ai_family = AF_UNSPEC;
|
|
|
|
|
aiHints.ai_flags = AI_NUMERICHOST;
|
|
|
|
|
|
|
|
|
|
/* try to translate IP */
|
|
|
|
|
if ((retVal = getaddrinfo(pcap_dev, NULL, &aiHints, &aiList)) != 0) {
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (pcap_findalldevs(&alldevsp, errbuf)) {
|
|
|
|
|
freeaddrinfo(aiList);
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
for (devsp = alldevsp; devsp ; devsp = devsp->next) {
|
|
|
|
|
pcap_addr_t *ip = NULL;
|
|
|
|
|
|
|
|
|
|
for (ip = devsp->addresses; ip ; ip = ip->next) {
|
|
|
|
|
|
|
|
|
|
if (aiList->ai_family != ip->addr->sa_family) {
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (ip->addr->sa_family == AF_INET) {
|
|
|
|
|
if (memcmp(&((struct sockaddr_in*)aiList->ai_addr)->sin_addr, &((struct sockaddr_in*)ip->addr)->sin_addr, sizeof(struct in_addr))) {
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
} else if (ip->addr->sa_family == AF_INET6) {
|
|
|
|
|
if (memcmp(&((struct sockaddr_in6*)aiList->ai_addr)->sin6_addr, &((struct sockaddr_in6*)ip->addr)->sin6_addr, sizeof(struct in6_addr))) {
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
} else {
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
freeaddrinfo(aiList);
|
|
|
|
|
|
|
|
|
|
memset(pcap_dev, 0, len);
|
|
|
|
|
strlcpy(pcap_dev, devsp->name, len);
|
|
|
|
|
|
|
|
|
|
pcap_freealldevs(alldevsp);
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
freeaddrinfo(aiList);
|
|
|
|
|
|
|
|
|
|
pcap_freealldevs(alldevsp);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* eof */
|
|
|
|
|