Захват пакетов с помощью C в Windows

Я новичок в языке программирования C и захвате пакетов. Прямо сейчас я пишу простую программу (используя Visual Studio 2010 Express) для декодирования файла захвата трассировки пакетов. Я прочитал несколько руководств, но большинство из них для Linux/Unix. Мне удалось включить библиотеки wpcap, но теперь мне нужны определенные в системе структуры, предназначенные для упрощения декодирования заголовков интернет-пакетов.

struct ether_header in /usr/include/sys/ethernet.h
struct in_addr in /usr/include/netinet/in.h
struct ip in /usr/include/netinet/ip.h
struct udphdr in /usr/include/netinet/udp.h
struct tcphdr in /usr/include/netinet/tcp.h

До сих пор я понимал, что для in.h должен быть включен winsock2, а как насчет ethernet, ip, tcp/udp? Что мне делать, чтобы управлять декодированием, связанным с этими заголовками? это тот же винсокет? если это так, где я могу найти простое объяснение того, какие методы использовать?

ОС: Вин 7


person Medardas    schedule 23.11.2011    source источник
comment
Вопрос о захвате или о расшифровке содержимого существующего файла дампа? ... заголовок предполагает первое, текст - второе.   -  person 0xC0000022L    schedule 24.11.2011
comment
я просто хочу знать, что я должен использовать вместо тех файлов заголовков, которые я набрал здесь   -  person Medardas    schedule 24.11.2011


Ответы (3)


На самом деле, большинство этих заголовков изначально предназначались для облегчения написания сетевого стека ядра BSD, а не для облегчения декодирования заголовков пакетов в снифферах; они присутствуют для пользовательских программ отчасти по историческим причинам.

Я бы посоветовал получить исходный код последних версий tcpdump или WinDump и сделать в нем собственные копии соответствующих заголовочных файлов; файлы ether.h, ip.h, udp.h и tcp.h из tcpdump/WinDump берутся из операционных систем, производных от BSD, поэтому tcpdump/WinDump не должен зависеть от операционной системы, предоставляющей эти заголовки, или от конкретных версий этих заголовков ( не все операционные системы, на которых tcpdump/WinDump может работать, предоставляют версии, которые хорошо работают с tcpdump/WinDump, при этом некоторые из них требуют специальных хакерских действий для tcpdump, а некоторые вообще их не предоставляют — Windows, например, не предоставляет их вообще, как вы обнаружили).

Вы можете получить исходный код tcpdump с tcpdump.org, а исходный код WinDump с winpcap.org (см. раздел "Загрузка исходного кода WinDump 3.9.5"). Исходный файл WinDump находится в ZIP-файле, а не в сжатом tar-файле, поэтому его может быть проще распаковать в Windows, и он может иметь окончание строки Windows CR-LF, а не окончание строки UN*X LF, поэтому вы можете попробовать Версии WinDump.

person Community    schedule 24.11.2011

Даже если вы работаете в Windows, поскольку вы используете libpcap, вы можете извлечь пользу из Unix Network Программирование об. 1 и TCP/IP проиллюстрировано Vol. 1. Вы можете купить эти новые или бывшие в употреблении устройства на Amazon Marketplace. Это объяснит заголовки и другие связанные элементы.

person ConcernedOfTunbridgeWells    schedule 23.11.2011
comment
Libpcap начинался с Unix; программирование для него в Windows не будет радикально отличаться. Довольно много материала в этих книгах будет иметь отношение к вам. - person ConcernedOfTunbridgeWells; 24.11.2011

Я включаю только эти (в этом порядке)

#include <winsock2.h>
#include <windows.h>
person dashesy    schedule 23.11.2011