беспроводной сниффинг с использованием pcap, фильтра MAC-адресов - PullRequest
0 голосов
/ 06 февраля 2012

Я пишу беспроводную программу для отслеживания пакетов на C. Я установил свой беспроводной интерфейс в режиме монитора с помощью airmon-ng, и теперь я слежу за интерфейсом "mon0".Я использую Linux (Ubuntu 10.10).

Я хочу установить MAC-адрес в качестве фильтра для пакетов.Я сделал это, как показано ниже, но там написано «mon0, IPV4-адрес не назначен»

 pcap_lookupnet(dev,&net,&mask,errbuf);
    printf("%s\n",errbuf);
    /* Open the session in promiscuous mode */
    handle = pcap_open_live(dev, BUFSIZ, 1, 1000, errbuf);
    if (handle == NULL) {
        printf("Couldn't open device %s: %s\n", dev, errbuf);
        return 2;
    }
    if(pcap_compile(handle,&fp,argv[0],0,net)==-1){
        fprintf(stderr,"Error calling pcap_compile\n");exit(1);}
    if(pcap_setfilter(handle,&fp) == -1){
        fprintf(stderr,"Error setting filter\n");exit(1);}
    /* The call pcap_loop() and pass our callback function */
    pcap_loop(handle, 10, my_callback, NULL);

Пожалуйста, помогите мне, как я могу установить фильтр для MAC-адреса ??

1 Ответ

5 голосов
/ 06 февраля 2012

«IPv4-адрес не назначен» - ошибка от pcap_lookupnet(). Все это означает, что сетевому интерфейсу, на котором вы пытаетесь захватить, не назначен адрес IPv4. airmon-ng создал «интерфейс монитора» для адаптера Wi-Fi; обычному сетевому интерфейсу адаптера может быть назначен IP-адрес, но интерфейсу монитора его не будет.

Место only , где IP-адрес имеет значение для ip broadcast выражений фильтра; если вы не фильтруете широковещательные адреса IPv4, чего, вероятно, не будет, вам не нужно получать адрес IPv4. Цитировать справочную страницу pcap_compile():

Если сетевая маска сети, в которой перехватываются пакеты, неизвестна программе, или если пакеты перехватываются в Linux «любым» псевдоинтерфейсом, который может захватывать более чем в одной сети, значение 0 может быть предоставлено; тесты для широковещательных адресов IPv4 не будут выполнены правильно, но все остальные тесты в программе фильтра будут в порядке.

поэтому просто передайте 0 в качестве аргумента "net" для pcap_compile().

Если вы хотите искать пакеты, отправляемые на определенный MAC-адрес, вы можете просто использовать wlan dst XX:XX:XX:XX:XX:XX; если вы хотите искать отправляемые пакеты с определенного MAC-адреса, вы можете просто использовать wlan src XX:XX:XX:XX:XX:XX; если вы хотите искать пакеты, отправляемые на определенный MAC-адрес или с него, вы можете просто использовать wlan host XX:XX:XX:XX:XX:XX. Если вам важен адрес точки доступа, а не адрес станции, вам нужно использовать фильтры, такие как wlan ra XX:XX:XX:XX:XX:XX или wlan ta XX:XX:XX:XX:XX:XX, по крайней мере, в более новых версиях libpcap. (См. Справочную страницу фильтра pcap или, если у вас нет справочной страницы фильтра pcap, подробности смотрите в справочной странице tcpdump.)

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