Chinaunix首页 | 论坛 | 博客
  • 博客访问: 321788
  • 博文数量: 78
  • 博客积分: 1547
  • 博客等级: 上尉
  • 技术积分: 842
  • 用 户 组: 普通用户
  • 注册时间: 2006-01-12 23:46
个人简介

music,code,dialog,rest

文章分类

全部博文(78)

文章存档

2022年(10)

2021年(6)

2020年(2)

2019年(6)

2018年(4)

2017年(5)

2016年(20)

2015年(4)

2014年(2)

2013年(1)

2012年(1)

2011年(1)

2010年(1)

2009年(2)

2007年(10)

2006年(3)

分类: 网络与安全

2006-01-12 23:46:59

更新了TcpDumpPkt模块数据提取算法,对包数据进行更精确的解析,便于对新格式的数据进行自由适配,当然也需要做一些代码的调整,但这种调整已经相对方便很多了。
在本次调整中没有对接口参数做任何改变,所以仍能和原先的OOP包裹器协同工作。
 
文件: TcpDumpPkt.zip
大小: 4KB
下载: 下载
 
4/8 2008
 
现正式发布TcpDumpPkt之OOP的Wrapper实现!此实现需要对TcpDumpPkt模块同时升级。
打包文件已包含TcpDumpPkt的最新升级版本。
 
已经修正了一些文档中的打字错误,更新了文档。
 
安装方法:
将Capturer.pm 不带内部路径提取到 路径c:\perl\site\lib的PcapToolSet下,
或带内部路径路径提取到 c:\perl\site\lib下。
TcpDumpPkt.pm 提取到 c:\perl\site\lib\NetPacket 下即可.
 
Unix/Linux 可以释放到
/usr/perl5/site_perl下的PcapToolSet和NetPacket下。
 
简单例子:
 

#!/usr/bin/perl -w

    
    use strict;
    use PcapToolSet::Capturer;
    use NetPacket::IP;
    use NetPacket::TCP;
      
    my $capture=new PcapToolSet::Capturer(
            INTERFACE=>"eri0",
            TOOLNAME=>"SNOOP",
            FILTER=>"port 8890",
            PLATFORM=>"SOLARIS"
        );
    $capture->loopPacket(\&decoder);
    
    sub decoder {
        my ($pkt,$header)=shift;
        my $hlen;
        if (defined($pkt)){
            my $ip_obj = NetPacket::IP->decode($pkt);
            my $tcp_obj = NetPacket::TCP->decode($ip_obj->{data});
            
            
# IP and TCP Header byte alignment

            $hlen=($ip_obj->{hlen}*4)+($tcp_obj->{hlen}*4);
            
            my $HeaderMsg1="$header, IP&TCP Header OFFSET Length=$hlen Bytes!";
            print $HeaderMsg1;
            NetPacket::TcpDumpPkt::PktHexPrint($pkt,20);
        }
    }

 
作为一个易于理解的例子,程序简单将eri0接口上抓获的IP数据重新输出到屏幕上。可以看到,使用OOP结构后,增强了代码的可读性和功能操控性。
 
详细参数含义,参考内置的文档。
 
 
文件: PcapToolSet_v01.zip
大小: 12KB
下载: 下载
 
2007/8/24
 
 
现在已经直接支持Sun Snoop的格式了,而且同时支持两种,一种是Sun Snoop读取文件的输出格式,另一种是Sun Snoop 实时管道的输出格式。同时通过变量引用,提供了包头消息的传递,以便于在主程序中,对所有消息进行统一处理。
 
更新了POD文档!
 
前一阶段在,CU上参与了tcpdump的使用的讨论。提到了如何巧用tcpdump解析任意IP应用层协议的方法。
 
在此,主要总结此类用法,并提供Perl的样本程序的关键部分,供大家参考。
主要的命令行如下:
 
tcpdump -xls 0 port | yourprogram
 
其中 -x 为输出格式,以IP头为起点到应用层,数据样本如下
 
5:42:55.587201 192.168.1.1.10000 > 192.168.2.1.47915: . ack 91 win 49232 (DF)
    4500 0034 6798 4000 4006 1f48 0a01 0230
    c0a8 e70a 70d8 bb2b 366b 9dd2 9919 2f2b
    8010 c050 4990 0000 0101 080a 08b0 8afe
    1536 478d
 
-l 为用于管道的缓存,在有管道时使用
 
-s 0, 为按包长显示,避免数据包长大于60字节后的包数据丢弃。
 
本人已将tcpdump -xls 0格式输出的数据包进行包重构部分,写成Perl模块,方便调用。
 
在使用时,只要按如下方法,就可以进行包重构和解析了。
 

use NetPacket::TcpdumpPkt;
use NetPacket::IP;
use NetPacket::TCP;

my @Buffer;

while (<STDIN>) {
    my $packet=PacketRebuild(\@Buffer,$_,TCPDUMP,LOG);
    if (defined($packet)){
        process($packet)
    }
}

my $packet=PacketRebuild(\@Buffer,LASTPKT,TCPDUMP,LOG);
    if (defined($packet)){
        process($packet)
    }

sub process{
...
}

 
 
本模块支持Tcpdump或Windump的管道,并支持包头提示行的打印和不打印。
 
PacketRebuild(,<$_|LASTPKT>,,)
 
 
怎么样够简单吧!需要的朋友,可以自己下载去体验体验。
 
模块安装方法,很简单,只要将该文件,拷贝到perl安装目录的site\lib\NetPacket目录下就可以了。
 
0.03更新了不跳过最后一个数据包的生成,对于非实时的管道的用法可以保证,没有数据包丢失。如果用实时管道传输Tcpdump数据,则没有影响! 并增加了较为全面的帮助文件!
 
0.04添加了PktHexPrint功能,能按$column指定的每行字节数(建议用16或20),以HexASCII值打印数据包。可以在解包后,将Hex值输出作为解码的实时参考。
 
0.08添加对Solaris SNOOP的支持。
 
文件: TcpDumpPkt.zip
大小: 5KB
下载: 下载
 
例如:
 
非实时管道
tcpdump -r xxx.cap -xls 0 | program
 
实时管道
tcpdump -i eth0 -xls 0 | program
 
 
有问题可以给我来信!
 
Grei
grei_john@hotmail.com
阅读(5820) | 评论(2) | 转发(0) |
给主人留下些什么吧!~~