简体   繁体   中英

interface ip from ifconfig and libpcap don't match

This is my first post to stackoverflow.

I'm doing a packet analyzer with libpcap (1.2.1), i have managed run some examples and i have already written part of my analyzer, then I realize one thing.

my ifconfig say this:

wlan0     Link encap:Ethernet  HWaddr 90:00:4e:96:80:b1  
          inet addr:192.168.100.100  Bcast:192.168.100.255  Mask:255.255.255.0
          inet6 addr: fe80::9200:4eff:fe96:80b1/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:304853 errors:0 dropped:0 overruns:0 frame:0
          TX packets:279099 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:403507845 (403.5 MB)  TX bytes:28330813 (28.3 MB)

as you can see the ip adress is 192.168.100.100

then I compiled again example to show dev name, netmask and ip, this example use libpcap and i got this:

DEV: wlan0
NET: 192.168.100.0
MASK: 255.255.255.0

which is not correct i think

the code of that example is:

#include <stdio.h>
#include <stdlib.h>
#include <pcap.h> 
#include <errno.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>

int main(int argc, char **argv)
{
    char *dev; /* name of the device to use */ 
    char *net; /* dot notation of the network address */
    char *mask;/* dot notation of the network mask    */
    int ret;   /* return code */
    char errbuf[PCAP_ERRBUF_SIZE];
    bpf_u_int32 netp; /* ip          */
    bpf_u_int32 maskp;/* subnet mask */
    struct in_addr addr;

  /* ask pcap to find a valid device for use to sniff on */
    dev = pcap_lookupdev(errbuf);

  /* error checking */
    if(dev == NULL)
    {
        printf("%s\n",errbuf);
        exit(1);
    } 

  /* print out device name */
    printf("DEV: %s\n",dev);

  /* ask pcap for the network address and mask of the device */
    ret = pcap_lookupnet(dev,&netp,&maskp,errbuf);

    if(ret == -1)
    {
        printf("%s\n",errbuf);
        exit(1);
    }

  /* get the network address in a human readable form */
    addr.s_addr = netp;
    net = inet_ntoa(addr);

    if(net == NULL)/* thanks Scott :-P */
    {
        perror("inet_ntoa");
        exit(1);
    }

    printf("NET: %s\n",net);

  /* do the same as above for the device's mask */
    addr.s_addr = maskp;
    mask = inet_ntoa(addr);

    if(mask == NULL)
    {
        perror("inet_ntoa");
        exit(1);
    }

    printf("MASK: %s\n",mask);

    return 0;
}

What is wrong?

Thanks in advance

As the code says, 192.168.100.0 is the network address, not your IP address. The network address is generated by bitwise ANDing your IP address and the netmask.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM