H
H
Hatemylifezxc2020-04-16 12:22:15
C++ / C#
Hatemylifezxc, 2020-04-16 12:22:15

How to catch all phone packets with pcap.h?

I want to catch ALL packets from mobile devices next to the computer, I use the Winpcap library and driver for this. But I do not quite understand how it works (generally poor knowledge of networks).
Does the phone itself always send packets to the computer's network card, even if nothing is configured on the phone? Not only to the router, but also to the network card of the computers next to it? Or does winpcap somehow work with a router to which both devices are connected, and if the phone uses lte, and not wi-fi?
Plus, I have a problem with the fact that only a part of the packages is caught, even on the local computer where the program is running.
for example, I load pages in the browser, and the packets are either caught by the program or not. The code is the most common of the examples, there seems to be no errors there.

#include "pcap.h"

/* prototype of the packet handler */
void packet_handler(u_char *param, const struct pcap_pkthdr *header, const u_char *pkt_data);

int main()
{
pcap_if_t *alldevs;
pcap_if_t *d;
int inum;
int i=0;
pcap_t *adhandle;
char errbuf[PCAP_ERRBUF_SIZE];
  
  /* Retrieve the device list on the local machine */
  if (pcap_findalldevs_ex(PCAP_SRC_IF_STRING, NULL, &alldevs, errbuf) == -1)
  {
    fprintf(stderr,"Error in pcap_findalldevs: %s\n", errbuf);
    exit(1);
  }
  
  /* Print the list */
  for(d=alldevs; d; d=d->next)
  {
    printf("%d. %s", ++i, d->name);
    if (d->description)
      printf(" (%s)\n", d->description);
    else
      printf(" (No description available)\n");
  }
  
  if(i==0)
  {
    printf("\nNo interfaces found! Make sure WinPcap is installed.\n");
    return -1;
  }
  
  printf("Enter the interface number (1-%d):",i);
  scanf_s("%d", &inum);
  
  if(inum < 1 || inum > i)
  {
    printf("\nInterface number out of range.\n");
    /* Free the device list */
    pcap_freealldevs(alldevs);
    return -1;
  }
  
  /* Jump to the selected adapter */
  for(d=alldevs, i=0; i< inum-1 ;d=d->next, i++);
  
  /* Open the device */
  if ( (adhandle= pcap_open(d->name,			// name of the device
                65536,			// portion of the packet to capture
                        // 65536 guarantees that the whole packet will be captured on all the link layers
                PCAP_OPENFLAG_PROMISCUOUS, 	// promiscuous mode
                1000,				// read timeout
                NULL,				// authentication on the remote machine
                errbuf			// error buffer
                ) ) == NULL)
  {
    fprintf(stderr,"\nUnable to open the adapter. %s is not supported by WinPcap\n", d->name);
    /* Free the device list */
    pcap_freealldevs(alldevs);
    return -1;
  }
  
  printf("\nlistening on %s...\n", d->description);
  
  /* At this point, we don't need any more the device list. Free it */
  pcap_freealldevs(alldevs);
  
  /* start the capture */
  pcap_loop(adhandle, 0, packet_handler, NULL);
  
  return 0;
}


/* Callback function invoked by libpcap for every incoming packet */
void packet_handler(u_char *param, const struct pcap_pkthdr *header, const u_char *pkt_data)
{
  struct tm ltime;
  char timestr[16];
  time_t local_tv_sec;

  /*
   * unused variables
   */
  (VOID)(param);
  (VOID)(pkt_data);

  /* convert the timestamp to readable format */
  local_tv_sec = header->ts.tv_sec;
  localtime_s(&ltime, &local_tv_sec);
  strftime( timestr, sizeof timestr, "%H:%M:%S", &ltime);
  
  printf("%s,%.6d len:%d\n", timestr, header->ts.tv_usec, header->len);
  
}


When I turn off the browser and it seems like everything that sends packets, and on the phone I turn on the game for example (it must transmit a huge number of packets per second, and only a small part of the packets comes to the program every 5 seconds. And it’s not a fact that these are packets games.

Answer the question

In order to leave comments, you need to log in

1 answer(s)
J
John Doe, 2020-04-24
@illuminoid

tcpdump will help you

Didn't find what you were looking for?

Ask your question

Ask a Question

731 491 924 answers to any question