Как получить информацию из LIBPCAP? - PullRequest
0 голосов
/ 08 января 2020

Мне нужно получить информацию о пакете inte rnet, и я пытался использовать следующий код, но у меня нет опыта работы с C ++.

Я выполнил этот код из этого урока http://yuba.stanford.edu/~casado/pcap/section1.html

#include <stdio.h>
#include <stdlib.h>
#include <pcap.h>  /* GIMME a libpcap plz! */
#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;
}

Когда я выполняю этот код, я получаю файл a.out, но я не могу открыть файл, почему? Как я могу передать свою информацию в .csv?

Ответы [ 2 ]

3 голосов
/ 15 апреля 2020

У меня нет опыта работы с C ++

Хотя код может компилироваться с использованием компилятора C ++, он больше похож на код C. Имя файла ldev.c и используемый компилятор также говорят, что это программа C.

Когда я выполняю этот код, я получаю файл a.out, но не могу открыть почему?

На последнем шаге руководства рассказывается, как компилировать программу, а не как ее выполнять:

gcc ldev.c -lpcap

Этот шаг выдает a.out - программу, которую вы должны выполнить.

Для фактического выполнения программы выполните команду:

./a.out

Тогда, если все работает, вывод должен быть примерно таким:

DEV: eth0
NET: 192.168.12.0
MASK: 255.255.255.0
0 голосов
/ 12 апреля 2020

Запись в файл .csv не сильно отличается от записи c в любой другой файл. Нам нужно открыть файл с помощью библиотеки

#include <fstream>

Затем мы создаем наш файл для записи в

std::ofstream outputFile;

, открываем его с помощью

outputFile.open("random.csv");

и запускаем запись с использованием запятых в качестве разделителей

outputFile << "a,b,c,\n";
outputFile << mask << "\n"; // in your case

Тогда не забудьте закрыть его!

outputFile.close();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...