⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 d02411ff0e86001c12e0e10f0ba22bae

📁 网络抓包程序用java实现
💻
字号:
import jpcap.*;
import java.io.*;
import java.sql.*;
import jpcap.packet.*;
public class catchbao implements PacketReceiver
{    static int count=0;
	 static StringBuffer sting=new StringBuffer("");    //定义一个空的字符串
	 	 
	 public void receivePacket(Packet packet)
	 {  if(packet instanceof IPPacket)   //判断是不是IP数据包
	    {   
		    IPPacket ip;
		    ip=(IPPacket)packet;
		    System.out.print(ip.src_ip.getHostAddress()+"\t"+ip.dst_ip.getHostAddress()+"\t"+ip.protocol+"\t"+ip.length+"\t"+ip.version+"\t"+ip.ident+"\t"+ip.rsv_frag+"\t"+ip.offset+"\t"+ip.hop_limit+"\t"+ip.rsv_tos+"\r\n");
		    count++;
		    //把相应的IP数据添加到定义的空字符串中;原句是public StringBuffer append(String str)
		    //主要功能:是把形参字符串加到当前字符串之后,形成一个新的可变字符串
		    sting.append(ip.src_ip.getHostAddress()+"\t"+ip.dst_ip.getHostAddress()+"\t"+ip.protocol+"\t"+ip.length+"\t"+ip.version+"\t"+ip.ident+"\t"+ip.rsv_frag+"\t"+ip.offset+"\t"+ip.hop_limit+"\t"+ip.rsv_tos+"\r\n");
		    String JDriver="sun.jdbc.odbc.JdbcOdbcDriver";    //声明JDBC驱动程序对象
		    String conURL="jdbc:odbc:java";                   //定义JDBC的URL对象
	        try
	        {  Class.forName(JDriver);    }          //注册驱动程序
	        catch(java.lang.ClassNotFoundException e)
	        {  System.out.println("ForName:"+e.getMessage());   }
	        try
	        {  Connection con=DriverManager.getConnection(conURL);    //建立数据库连接
	 	       Statement s=con.createStatement();    //创建Statement类对象s,准备进行SQL操作
	 	       String r1="insert into Pp values('"+ip.src_ip.getHostAddress()+"','"+ip.dst_ip.getHostAddress()+"',"+ip.protocol+","+ip.length+","+ip.version+","+ip.ident+",'"+ip.rsv_frag+"',"+ip.offset+","+ip.hop_limit+","+ip.rsv_tos+")";
	 	       //使用SQL命令insert插入这条记录到表中
	 	       s.executeUpdate(r1);    //执行SQL修改命令
	 	       s.close();      //释放Statement所连接的数据库及JDBC资源
	           con.close();    //关闭与数据库的连线
	        }
	        catch(SQLException e)
	        {  System.out.println("SQLException:"+e.getMessage());   }
	     }
	 }
	     
	 public static void main(String[] args) throws Exception 
	 {   //String JDriver="{Microsoft Access Driver (*.mdb)}";
		 //String JDriver="jdbc:odbc:driver={Microsoft Access Driver (*.mdb)};DBQ=D:\\AccessDB\\CapturedPacket.mdb";
		 //以下是创建一个数据表,上面两句话和下面一句本质上是等同的
		  String JDriver="sun.jdbc.odbc.JdbcOdbcDriver";      //声明JDBC驱动程序对象
		  String conURL="jdbc:odbc:java";        //定义JDBC的URL对象
          try
          {  Class.forName(JDriver);    }      //加载JDBC-ODBC桥驱动程序
          catch(java.lang.ClassNotFoundException e)
         {  System.out.println("ForName:"+e.getMessage());   }
         try
         { 	
        	 Connection con=DriverManager.getConnection(conURL);     //连接数据库URL
 	         Statement s=con.createStatement();       //建立Statement类对象
 	         String query="Create table Pp("     //创建一个有如下10个字段的Pp表
 		                  +"原IP地址 char(20),"
 		                  +"目的地址 char(20),"
 		                  +"协议 int,"
 		                  +"长度 int,"
 		                  +"版本 int,"
 		                  +"标识 int,"
 		                  +"标志 char(8),"
 		                  +"段偏移量 int,"
 		                  +"生存周期 int,"
 		                  +"服务类 int"
 		               	  +")";
 	       s.executeUpdate(query);    //执行SQL命令
 	       s.close();    //释放Statement所连接的数据库及JDBC资源
 	       con.close();  //关闭与数据库的连线
         }
         catch(SQLException e)
         { 	
        	 
            System.out.println("SQLException:"+e.getMessage()); }
          //以下是完成抓包和用txt文档来储存所抓到的包
		   NetworkInterface[] devices = JpcapCaptor.getDeviceList();    //获得网卡设备的信息
	       System.out.println("★捕获的网络数据包★: \n");
	       JpcapCaptor jpcap = JpcapCaptor.openDevice(devices[1],65535,true, 20);   //选择有用的网卡,从而来捕获数据包    
	       jpcap.loopPacket(30,new catchbao()); //捕获150000个包
	       try      
	       {	  RandomAccessFile rf = new RandomAccessFile("pack.txt", "rw");   //创建一个用来输入输出RandomAccessFile流,文件名为pack的文本文档
	              rf.seek(rf.length());     //定位文件指针在文件中的最后
	              rf.writeBytes(sting.toString());//向txt文件写入IP的源地址,目标地址,高层协议,长度, 版本号,标识符(序号),标志,段偏移量,数据报的寿命数值,服务型号,数据
	              rf.close();
	       }
	       catch (Exception e) {
	             e.printStackTrace();    //打印出错的地方
	      }
	       System.out.println("\n ★捕获结束★::捕获的数据包有: "+count+"个");
	 }
	 Drawpicture p=new Drawpicture();
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -