1

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

Jan
  • 1,054
  • 13
  • 36
  • possible duplicate of [pcap_lookupnet returns incorrect IP address](http://stackoverflow.com/questions/9213828/pcap-lookupnet-returns-incorrect-ip-address) –  Feb 24 '12 at 16:45
  • that is true, it is the exact same problem that i'm having apologize me for the duplicate – Jan Feb 24 '12 at 19:02
  • ًRelated: https://stackoverflow.com/a/9443991/7508077 – EsmaeelE Mar 30 '20 at 09:16

1 Answers1

0

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.

user389238
  • 1,656
  • 3
  • 19
  • 40
Brendan Shanks
  • 3,141
  • 14
  • 13