3

我对 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

到现在为止我都明白winsock2必须包含在in.h中,但是ethernet、ip、tcp/udp呢?我应该怎么做才能管理与这些标头相关的解码?是同一个winsocket吗?如果是,我在哪里可以找到使用什么方法的简单解释?

操作系统:赢 7

4

3 回答 3

4

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

我建议获取最新版本的 tcpdump 或 WinDump 的源代码,并在其中制作相应头文件的副本;tcpdump/WinDump 中的ether.hip.hudp.htcp.h文件取自 BSD 派生的操作系统,因此 tcpdump/WinDump 不必依赖提供这些头文件的操作系统或提供这些头文件的特定版本的操作系统(并非所有tcpdump/WinDump 可以运行的操作系统供应与 tcpdump/WinDump 配合良好的版本,其中一些需要特殊的 tcpdump 黑客技术,而另一些则根本不提供它们 - 例如,Windows 根本不提供它们,正如你所发现的)。

您可以从 tcpdump.org 获取 tcpdump 源代码,从winpcap.org获取 WinDump 源代码(查看“WinDump 3.9.5 源代码下载”下)。WinDump 源位于 ZIP 文件而不是 gzip 压缩的 tar 文件中,因此在 Windows 上解压缩可能更容易,并且可能具有 Windows CR-LF 行结尾而不是 UN*X LF 行结尾,因此您可能想尝试WinDump 版本。

于 2011-11-24T09:39:17.493 回答
1

即使您在 Windows 上工作,但在使用 libpcap 时,您可能会从Unix Network Programming vol. 1TCP/IP 插图卷。1. 您可以在亚马逊商城购买这些新的或二手的。这将解释标题和其他相关项目。

于 2011-11-23T22:03:59.037 回答
1

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

#include <winsock2.h>
#include <windows.h>
于 2011-11-23T22:20:18.070 回答