2011-11-23 23 views
2

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

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中,但对于以太网,IP,TCP/UDP?我应该如何管理与这些头文件相关的解码?它是一样的winsocket?如果是这样,我可以在哪里找到使用什么方法的简单解释?

OS:Win 7的

+1

是关于捕获或解码现有转储文件内容的问题? ...标题表明前者,后者是文字。 – 0xC0000022L

+0

我只想知道我应该用什么来代替那些我在这里输入的头文件 – Medardas

回答

3

其实,大多数这些头的最初目的是使编写BSD内核网络协议栈更容易,在嗅探器不容易使解码数据包报头;由于历史原因,它们出现在用户程序中。

我建议获取最新版本的tcpdump或WinDump的源代码,并在其中创建自己的相应头文件副本; ether.h,ip.h,udp.h,tcp.h来自tcpdump/WinDump的文件取自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

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

+1

是的......那个不会告诉我在windows中做什么...... – Medardas

+0

Libpcap在Unix上开始了;在Windows上进行编程不会有太大的不同。这些书中的很多材料都会与你相关。 – ConcernedOfTunbridgeWells

1

我只包括这些(按照这个顺序)

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