【问题标题】:Packet capturing with C in Windows在 Windows 中使用 C 进行数据包捕获
【发布时间】:2012-01-05 04:19:54
【问题描述】:

我对 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吗?如果是,我在哪里可以找到使用什么方法的简单解释?

操作系统:Win 7

【问题讨论】:

  • 问题是关于捕获还是关于解码现有转储文件的内容? ...标题建议前者,文本建议后者。
  • 我只是想知道我应该用什么来代替我在这里输入的那些头文件

标签: windows packet pcap packet-sniffers winpcap


【解决方案1】:

实际上,这些标头中的大多数最初是为了使编写 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 版本。

【讨论】:

    【解决方案2】:

    即使您在 Windows 上工作,但在使用 libpcap 时,您可能会从 Unix Network Programming vol. 1TCP/IP illustrated Vol. 1. 获得一些好处。您可以从 Amazon Marketplace 购买这些新的或二手的。这将解释标题和其他相关项目。

    【讨论】:

    • Libpcap 在 Unix 上开始;在 Windows 上对其进行编程不会有根本的不同。这些书中的很多内容都与您息息相关。
    【解决方案3】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-02-11
      • 2012-07-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-04
      • 2016-08-17
      • 2017-05-25
      相关资源
      最近更新 更多