Захват пакетов с помощью C в Windows - PullRequest
3 голосов
/ 24 ноября 2011

Я довольно плохо знаком с языком программирования 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

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

ОС: Win 7

Ответы [ 3 ]

4 голосов
/ 24 ноября 2011

На самом деле, большинство из этих заголовков изначально предназначались для облегчения написания сетевого стека ядра 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.

1 голос
/ 24 ноября 2011

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

#include <winsock2.h>
#include <windows.h>
1 голос
/ 24 ноября 2011

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

...