2016-02-19 1 views
-3

В принципе, я хочу простой C-код, который иллюстрирует захват пакета в беспорядочном режиме и извлекает из него ssid.Как выполнить сканирование wifi ap, доступного поблизости, используя pcap в c

Edit1

Я пишу код, который я написал для выполнения основных подслушиванию.

#include <stdio.h> 
#include <pcap.h> 

int main(int argc, char *argv[]){ 
    pcap_t *handle; 
    struct pcap_pkthdr header; 
    const u_char *packet; 
    int i; 

    char *dev, errbuf[PCAP_ERRBUF_SIZE]; 
    //  dev = pcap_lookupdev(errbuf); 
    dev = argv[1]; 
    if(dev == NULL){ 
      fprintf(stderr, "Couldn't find default device\n"); 
      return 0; 
    } 
    printf("Device: %s\n", dev); 
    handle = pcap_open_live(dev , BUFSIZ , 0 , 1000 , errbuf); 
    if(handle == NULL){ 
      fprintf(stderr , "couldn't open device %s: %s\n" , dev , errbuf); 
      return 0; 
    } 
    else{ 
      packet = pcap_next(handle, &header); 
      printf("Grabbed a packet with length %d\n" , header.len); 
      for(i = 0; i < header.len; i++) 
        printf("Packet's content %s\n" , packet + i); 
      pcap_close(handle); 
    } 
    return 0; 
} 
+0

Затем напишите его на C. Звучит просто. – Drew

+0

Вот что я не знаю! @Drew, и, следовательно, задал вопрос. –

+1

@AbhishekSingh SO не является кодовым письмом. Вы должны провести собственное исследование, чтобы изучить основы и попытаться реализовать его самостоятельно. Если вы не можете заставить его работать, вы публикуете свою попытку, и мы постараемся помочь вам исправить это. – Barmar

ответ

2

Вы можете использовать что-то вроде exec() или system(), чтобы вызвать соответствующие CLI инструменты/команды и разобрать вывод. Вы также можете посмотреть в libpcap, который может быть тем, что вы ищете (?).

+0

Я не заинтересован в запуске существующих программ, я четко попросил иллюстративный код. –

+1

Я не знаю соответствующего кода. Я просто хотел дать вам два варианта о том, как вы можете это сделать. Один из способов прост, если вы уже знаете, как это сделать с помощью CLI, а с другой, я уверен, что вы можете очень легко использовать Google для примера кода libpcap. Я хотел бы рассказать вам о двух способах получения желаемых результатов, а также обратиться к библиотеке, которую вы, возможно, не знали, существовали. Недостаток болит, я стараюсь получить 50 репа. поэтому я могу прокомментировать ответы! Если бы я знал код, я бы написал его, но я этого не сделал, но я хотел хотя бы * попробовать * быть полезным, чтобы это было ... – RastaJedi

+0

... (продолжение) почему я попытался хотя бы указать вам в правильном направлении и дать вам пару вариантов! Я могу показать вам код о том, как использовать exec() или system(). , , но это должно быть для других команд, так как у меня нет опыта работы с pcap. Если вам не нравится мой ответ, вы можете хотя бы удалить нижний план, чтобы он не повредил моей репутации :(Я думал, что было бы неплохо указать вам в правильном направлении, а также проверить http: // www. tcpdump.org/pcap.html. – RastaJedi

4

TLD; DR: Вы принципиально неправы. Пакет захвата с libpcap просто не работает таким образом для Wi-Fi.

  • Поскольку SSID в 802,11 кадров управления, вы хотите, чтобы захватить в режиме монитора, а не беспорядочном режиме.
  • Затем нужно использовать PCAP фильтр кадров управления, в частности, для маяков и/или зонда-запросов и/или ответов зондовых. Вот где SSID.
  • Затем, и только тогда вам придется закодировать разбор этих конкретных пакетов. Нет фиксированного формата (много опциональных полей, как видно из поиска захвата с помощью wirehark), поэтому нет «одного размера подходит для всего разбора». Но SSID не слишком сложно получить.

Тем не менее, вы далеко от этого синтаксического анализа SSID. На самом деле это последняя из ваших проблем. Итак, теперь подробности.

У вас есть 3 возможности относительно Libpcap по Wi-Fi:

1/Нормальный режим (не беспорядочные, а не монитор):

Вы увидите пакеты в/из вашего интерфейса. Не в/из других точек доступа (точек доступа) или STA (станций).

Эти пакеты будут выглядеть как «обычные кадры Ethernet», без 802,11 частей, ни чисто 802,11 управления пакетов, так что если ваша цель состоит в том, чтобы получить SSIDs вокруг вас, что нет ничего хорошего, вы просто не увидите эти , Единственным полезным для использования случаем является то, что ваш wlan0 является STA или самой AP, и вы хотите захватить трафик между сетевыми приложениями, запущенными на том же компьютере, на котором выполняется ваша программа захвата.

2/Промысловый режим.

Опять же, вы должны быть либо СТО или AP, и PCAP даст вам то, что выглядят как обычные кадры Ethernet, не часть 802,11 управления, так снова, что это бесполезна для SSID. Если вы STA: вы не увидите много похожего на случай 1/нормальный режим. То, что вы увидите больше, - это трансляция (из слоя 2/слой 3) кадров из другой STA. Например, ARP-запросы, многоадресный/широковещательный UDP.Но не одноадресный трафик от этих других STA. Если вы AP, то да, вы увидите трафик от подключенных STA (обратите внимание: если вы не используете Wi-Fi direct https://en.wikipedia.org/wiki/Wi-Fi_Direct, где станции общаются напрямую без пакетов, проходящих через точку доступа).

3/Режим монитора. Сейчас мы говорим.

Вы кладете интерфейс в режиме мониторинга с использованием Libpcap API см некоторые примеры направлений здесь:

Why is pcap_datalink() always returning 1 (Ethernet), even on wireless device?

... или вы будете создавать интерфейс мониторинга заранее и запустит свой PCAP процесс по этому вопросу. Читайте:

https://wiki.wireshark.org/CaptureSetup/WLAN#Turning_on_monitor_mode

Вы не будут подключены (ни как STA или AP) * и вы можете захватить все (но ... + видеть мое последнее предупреждение ниже): 802,11 управления обрамляет включая маяки , запросы зонда и ответы зонда, с вашими драгоценными SSID. И все данные. * Если у вас есть точки доступа без шифрования, TCP/IP данных из них будет прозрачным.

Теперь, «но» части:

3,1 - Что вы будете захватывать не будут регулярными Ethernet-подобные кадры. У вас будет заголовок radiotap (некоторая метаинформация, добавленная ядром), а затем пучок полей 802.11. Это может быть довольно утомительно для анализа, но если вас просто интересует SSID, это может быть всего несколько десятков строк кода C.

3.2 - Печально, нет фильтра «SSID» из синтаксиса фильтров pcap, который вы можете применить и просто пойти.

http://www.tcpdump.org/manpages/pcap-filter.7.html

И это потому, что там просто нет «SSID поля» за см, это зависит от типа/контекста пакета. Тем не менее, фильтры pcap могут помочь вам: что вы можете сделать, это захват маяков с использованием фильтра «type mgt subtype beacon». Вы также можете быть заинтересованы в "type mgt subtype probe-resp" и "type mgt subtype probe-resp". Затем вам придется вручную разобрать их: формат является «эластичным». К счастью, SSID является одним из первых полей, и это несколько десятков строк кода C, чтобы получить его.

Как только вы доберетесь до этого, но вы все еще далеки от него, если у вас возникли проблемы с разбором маяков, вы можете вернуться с более конкретным вопросом.

Окончательное предупреждение: быть предупреждены, что если вы хотите выйти за пределы SSID и захватить аппликативного трафика данных, даже оставить в стороне вопрос о шифровании, и синтаксический анализ работы, чтобы перейти от вашего + radiotap пакета 802,11 к слою 3 и выше сочных частей, ну ... результат не гарантируется. По моему опыту: моя среда чрезвычайно шумная (десятки занятых точек доступа и STA), и большую часть времени захват пропускает некоторые бит: прокрутка разреза на таком захвате показывает «ACKed невидимый сегмент», порядковые номера TCP имеют пробелы и «следуют TCP-диалог "на таком захвате показывает некоторые" [NNN missing bytes from capture] ".

+0

Действительно полезный ответ сэр! просто небольшое сомнение в том, что если необходим режим мониторинга, то как работает «iwlist scan» (Linux), так как я думаю, что он не включает режим монитора. –

+2

Да, очень верно, и это потому, что инструмент 'iw' и так общается с уровнями ядра' nl80211/mac80211' с использованием сокетов 'libnl', что является совершенно другим способом связи с 802.11, чем ваш оригинальный вопрос« Как выполните сканирование wifi ap рядом с помощью pcap ". ** pcap ** - акцент мой. – jbm

+0

Итак, есть ли способ получить SSID всех точек доступа, захватив кадры маяка с помощью библиотеки Pcap ?. Мне это действительно нужно, и я просмотрел все достоверные результаты из Google и не понял ничего полезного. –

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