在Windows中使用C进行数据包捕获

时间:2011-11-23 21:52:17

标签: windows packet pcap packet-sniffers winpcap

我对C编程语言和数据包捕获相当新。 现在我正在编写一个简单的程序(使用Visual Studio 2010 express)来解码数据包跟踪捕获文件。我阅读了很多指南,但大多数都是针对linux / unix的。我设法包含wpcap库,但现在我需要在系统中定义的结构 使解码Internet数据包标题更容易。

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呢?我该怎么做来管理与这些标题相关的解码?是不是winsocket?如果是的话,我在哪里可以找到使用哪种方法的简单解释?

操作系统:赢7

3 个答案:

答案 0 :(得分:4)

实际上,大多数这些标题最初都是为了使编写BSD内核网络堆栈更容易,而不是使嗅探器中的解码包头更容易;由于历史原因,它们出现在用户程序中。

我建议将源代码发送到最新版本的tcpdump或WinDump,并在其中制作相应头文件的副本;来自tcpdump / WinDump的ether.hip.hudp.htcp.h文件来自BSD派生的操作系统,因此tcpdump / WinDump不必依赖于提供这些头文件的操作系统或提供这些头文件的特定版本(不是tcpdump / WinDump可以运行的所有操作系统都提供与tcpdump / WinDump配合使用的版本,其中一些操作系统需要tcpdump和一些特殊的hackery其他人根本没有提供它们 - 例如,Windows根本没有提供它们,正如您所发现的那样。)

您可以从tcpdump.org获取tcpdump源代码,从winpcap.org获取WinDump源代码(请参阅“WinDump 3.9.5源代码下载”)。 WinDump源是一个ZIP文件,而不是一个gzip压缩文件,因此在Windows上解压缩可能更容易,并且可能有Windows CR-LF行结尾而不是UN * X LF行结尾,所以你可能想尝试WinDump版本。

答案 1 :(得分:1)

即使您正在使用Windows,因为您正在使用libpcap,您可能会从Unix Network Programming vol. 1TCP/IP illustrated Vol. 1.获得一些里程。您可以从亚马逊商城购买这些新的或二手的。这将解释标题和其他相关项目。

答案 2 :(得分:1)

我只包括这些(按此顺序)

#include <winsock2.h>
#include <windows.h>