lingchuanlee
驱动牛犊
驱动牛犊
  • 注册日期2010-02-08
  • 最后登录2010-08-16
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望71点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:2362回复:5

NDIS驱动程序和pcap文件格式

楼主#
更多 发布于:2010-03-23 11:33
我使用passthru拦截网络流量和直接写在日志文件. 我的问题是,可以写在pcap日志文件格式吗?
mz_suya
驱动小牛
驱动小牛
  • 注册日期2008-06-13
  • 最后登录2010-08-01
  • 粉丝0
  • 关注0
  • 积分3分
  • 威望648点
  • 贡献值2点
  • 好评度0点
  • 原创分0分
  • 专家分1分
沙发#
发布于:2010-03-23 16:38
你只要知道pcap是怎么组织的
可以的。
lingchuanlee
驱动牛犊
驱动牛犊
  • 注册日期2010-02-08
  • 最后登录2010-08-16
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望71点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2010-03-23 17:00
回 1楼(mz_suya) 的帖子
有无示例代码参考, 谢了
zfyang
驱动牛犊
驱动牛犊
  • 注册日期2007-02-25
  • 最后登录2010-04-23
  • 粉丝0
  • 关注0
  • 积分3分
  • 威望31点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2010-03-29 23:07
当然是可以的。我见过类似的软件,NDIS抓获数据包,存成Pcap格式。

Pcap的格式大致如下:
每个数据包包括两部分:
header 是Pcap数据的头部(而不是Ethernet数据头部)
data 是Ethernet数据的所有部分(包括Ethernet头部)
所以,如果你想将一个数据包记录成Pcap格式,代码大致为:
WriteFile(hFile,(LPCVOID)pcap_header, 16, &wlen, NULL);
WriteFile(hFile,(LPCVOID)eth_raw_data,pcap_header->caplen,&wlen,NULL);

hFile为写入的文件的Handle。

如果你自己编制的抓包程序,pcap_header要自己组织,这个头的格式如下:
struct pcap_pkthdr {
                struct timeval ts;      // time stamp 高位DWORD为纳秒数,低位DWORD为秒数
                bpf_u_int32 caplen;     // length 抓取到的数据包长度
                bpf_u_int32 len;        // length 数据包实际长度 (off wire)
        }

建议你安装一下pcap,看看pcap.h 。另外,安装完pcap后有不少工具软件帮你转化各种包格式,似乎还有相应的例子源程序程序教你怎么组织 pcap的头。


lingchuanlee
驱动牛犊
驱动牛犊
  • 注册日期2010-02-08
  • 最后登录2010-08-16
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望71点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2010-04-04 13:11
回 3楼(zfyang) 的帖子
如果我使用ZwWriteFile功能?
我直接从驱动程序记录网络流量数据包日志文件 c:\xxx.pcap.
lingchuanlee
驱动牛犊
驱动牛犊
  • 注册日期2010-02-08
  • 最后登录2010-08-16
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望71点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2010-06-16 12:36
回 4楼(lingchuanlee) 的帖子
有源代码我可以参考吗? 如果我直接从驱动程序记录网络流量数据包日志文件 c:\xxx.pcap
游客

返回顶部