2012-02-06 2 views
0

Я пишу программу беспроводного пакетного сниффера в C. Я установил свой беспроводной интерфейс в режиме мониторинга с помощью airmon-ng, и теперь я обнюхиваю интерфейс «mon0». Я использую linux (ubuntu 10.10).беспроводное обнюхивание с использованием pcap, фильтра MAC-адресов

Я хочу установить 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-адреса ??

ответ

5

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

только место, где имеет значение 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-фильтра или, если у вас нет страницы man-файла pcap-фильтра, подробную страницу можно найти на странице руководства tcpdump.)

+0

Я прочитал ваши руководства на веб-странице tcpdump. и я стараюсь учиться, читая то, что вы написали в stackoverflow. есть ли у вас веб-страница, на которой вы опубликовали больше инструкций о libpcap? – Angs

+0

К сожалению, нет. –

Смежные вопросы