📄 d02411ff0e86001c12e0e10f0ba22bae
字号:
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 + -