用JAVA实现网络数据包嗅探

  网络嗅探可是说是网络开发的一个基础,SNIFFER、IDS都是在这个基础上开发的,一个提供了网络分析,一个提供了入侵检测。实现一个网络嗅探程序到底有多难呢?可以很复杂,也可以很简单。在WINDOWS平台下,大多依靠的是WINPCAP,如果你觉得还复杂,那就再封装。JAVA就把它封装成了JPCAP,就是在WINPCAP的DLL基础上又提供了几个包(JAR),你只要引入你的包,创建包中的对象,引用人家的方法就好了。下面是一个很简单的例子,嗅探进入192.168.10.206的HTTP数据包的源地址、长度和二进制数据,并记录到out.txt文件中:
过程很简单,建立PacketCapture对象,lookupDevices发现本地网卡设备,打开其中一个,设置过滤条件,加入监听器,然后在监听程序中判断包格式,把源地址、长度和包数据写入文件。但是要说道原理就复杂多了,那要看网络的书了,各种协议的格式等等。总之有DLL的支援,JAVA的封装,留给我们的就是照猫画虎了。懂如何抓包的么?不懂!但是我可以抓到包并且分析之!这就够了。

import net.sourceforge.jpcap.capture.*;
import net.sourceforge.jpcap.net.*;
import java.util.*;
import java.io.*;

public class mycap implementsPacketListener{

   public static FileOutputStream  fos =null;
   private static final String FILTER = "dst host 192.168.10.206 andproto TCP and src port 80";
   public static void main(String[] args)throws Exception{
   int default_num = 1;

    PacketCapture pcap = new PacketCapture();
    String[] capDevices = pcap.lookupDevices();

    pcap.open( (newStringTokenizer(capDevices[default_num],"\n")).nextToken(),true);
    pcap.setFilter(FILTER, true);

    fos = new FileOutputStream("out.txt");

    mycap t1= new mycap();
    pcap.addPacketListener(t1);
    pcap.capture(-1);

   }
   
    public void packetArrived(Packet packet) {
       try{
          if(packet instanceof TCPPacket){
              TCPPacket mytcppacket = (TCPPacket) packet;
               fos.write("\n-----------------------------------------------------\n".getBytes());
               fos.write((mytcppacket.getSourceAddress()+"\t\t"+mytcppacket.getLength()+"\n").getBytes());
               fos.write(mytcppacket.getData());
          }
       }catch(Exception ioe){
           System.out.println("Exception ocurred:"+ioe);
       }
   }

}

注意:
1.你的机器可能有多个网卡,所以要lookupDevices,以便open你要的设备。标准的做法是显示出来,选择一个open,参数true是指打开网卡为混杂模式。
2.setFilter过滤条件的表达格式是BNF的,应参照WINPCAP的过滤格式。不设置过滤条件就是嗅探所有的数据包。
3.数据包封装的继承图是:Packet-EthernetPacket-ARPPacket, IPPacket-ICMPPacket,IGMPPacket, TCPPacket, UDPPacket。基本实现了TCP/IP的框架。
4.各个类的函数说明参见源代码压缩包中的说明文件。


  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值