网络数据包监视程序开发日志(四)

昨天做的事说起来比较简单,就是在电脑上配置好JPCAP,并写一个测试用的程序,目的是检查JPCAP是否能正常工作,再有就是看看能不能把局域网里其他电脑上的数据包截取下来。测试程序如下:

import jpcap.*;

import jpcap.packet.*;

import java.io.*;

 

public class JpcapTest implements PacketReceiver{

       public void receivePacket(Packet p){

              System.out.println("***********分析数据包*******************");  

              //System.out.println(p.toString());

              System.out.println("长度:/t"+p.caplen);

              System.out.println("数据头:/t");

              for(int i=0;i<p.header.length;i++){

                     System.out.print(Byte.toString(p.header[i]));      

              }

              System.out.println();

              System.out.println("IP包属性:");

              System.out.println("IP:/t"+ ((IPPacket)p).src_ip.toString() );

              System.out.println("目标IP/t"+ ((IPPacket)p).dst_ip.toString() );

              System.out.println("***********分析数据包*******************");  

       }

      

       public static void main(String[] args) throws IOException{

              NetworkInterface[] devices = jpcap.JpcapCaptor.getDeviceList();

              for(int i=0;i<devices.length;i++){

                     System.out.println("DEVICES "+i+":");

                     System.out.println("name:/t"+devices[i].name);

                     System.out.println("description:/t"+devices[i].description);

                     System.out.println("datalink_name:/t"+devices[i].datalink_name);

                            System.out.println("datalink_description:/t"+devices[i].datalink_description);

                     System.out.println("mac_address:/t");

                     for(int j=0;j<devices[i].mac_address.length;j++){

                        System.out.print(Integer.toHexString(devices[i].mac_address[j]&0xff) + ":");

                     }

                     System.out.println();

                     System.out.println("NetworkInterfaceAddress:/t");

                     for(int j=0;j<devices[i].addresses.length;j++){

                            

                       System.out.println("address:/t"+devices[i].addresses[j].address);

                          
                        System.out.println("broadcast:/t"+devices[i].addresses[j].broadcast);

                             
                     System.out.println("destination:/t"+devices[i].addresses[j].destination);

                            System.out.println("subnet:/t"+devices[i].addresses[j].subnet);

                     }

              }

              System.out.println("***********************************");

             

              JpcapCaptor cap = jpcap.JpcapCaptor.openDevice(devices[1],1028,true,10000);

              cap.loopPacket(-1,new JpcapTest());

       }    

}

 

配置JPCAP是比较简单的工作,所以这个程序也就可以正常工作了。配置方法在JPCAP的官网上有:http://netresearch.ics.uci.edu/kfujii/jpcap/doc/index.html可是,它只能监听到本机上的数据包,没能得到其他电脑上的数据包。为了第二个目的,昨天下午折腾了一下午,可是还是没有结果。

要截取到其他电脑上的数据包,就要把自己的网卡设置成混杂模式,JPCAP包中有一个方法jpcap.JpcapCaptor.openDevice(),里面的第三个参数就是把网卡设置成混杂模式的,可是不管用,难道还要对硬件做一些手脚??嗯,这就是今天最主要的任务了:监听通过其他电脑的数据包。

你可能感兴趣的:(工作,网络,String,测试,import,程序开发)