
1: 下载jdk6后,双击安装
2:下载JpcapSetup-0.7.exe,双击安装,下载WinPcap_4_0_1.exe,双击安装
3:下载JpcapDumper-src.zip,解压缩
4:启动eclipse,新建一个java项目,选择从已有的源代码创建工程,将刚才的解压缩目录选上,其他的要填写的内容不再说了
5:找到新创建的工程的main()函数,run,可以用了。
6:按理说到上面为止就可以了,但我的不知道为什么不可以,所以只好手动添加一下,在新建的项目上点击右键,propertise->java build path->libraries,选择add external jars,把刚才安装的jpcapsetup生成的jpcap.jar选上,OK。
至此java环境下的抓包环境就搭建好了,不过要特撇说明的是,一定要用jdk6,因为用jdk6会省去我们很多麻烦事,以前的jdk版本不是不可以用,而是如果用以前的就还要修改很多地方,比如classpath,所以还是用jdk6最好。
DLL 默认是读取 Windows 环境变量%PATH%,Linux 也有一个 LD 开头的变量(忘记叫什么名字)。而我们随时可以通过 -Djava.library.path=定制我们的 load library 路径搜索列表。把你的 dll 复制到到处都是不是一个推荐的方法,这会导致当我们有多个版本时出错或你换了版本时不知道具体有多少个地方未忘记替换,正确的方法是让 -Djava.library.path 中包括你的目录,这便于集中管理。另外作为 native 程序(VC,VB之类的非虚拟机程序)它们默认会把当前目录作为搜索目录,记住Java 不会默认把当前目录当作搜索目录,如果你偶然发现是这样的那是因为 环境变量 CLASSPATH 或 PATH 中包括了一个 "." 在里面,而这个”." 是安装 JRE 时自动添加或你手工添加的,有些程序的 bat 批处理文件中使用当前目录,但当我们在 bat 中通过 cd 命令改变了当前目录时我们再用”重启“的功能再启动命令行时我们就应该小心留言到这个当前目录已经变化了。
另外 Java Build Path (Java 构建路径)下添加 jar 包这个过程本身只是为”Build" 构建准备的,当我们在“Run" 运行的时候是不相关的(只是 Eclipse 会自动把 Java Build Path 转换在运行一个 main class 时的 classpath,当我们手工运行 main class 命令行时我们还是得自己添加 classpath,因此始终明白这个 Java Build Path 并不一定能解决 Run 的问题)。
//看了一下,程序没什么难点.其实没什么好注释的.都很清楚.应你的需要,就写一点吧.//你给出的程序只是小部分,有很多方法是关连到其他类的方法,你不给出,那只能看方法名称或可能的做法帮你注释了.
//该类的目的就是把数据包分类后插入数据库对应的表里,然后是窗口的文本域里显示出相关信息
//其实不知道你问什么问题,如果有不明白给我发消息
class ThreadPacket extends Thread //线程类
{
private Packet packet//接口,最少有IPPacket,TCPPacket,UDPPacket,ICMPPacket实现该接口
private MainFrame mainFrame//窗口类
private Connection con=null//接口,与特定数据库的连接(会话)。在连接上下文中执行SQL语句并返回结果
private Statement stmt=null//接口,用于执行静态SQL语句并返回它所生成结果的对象
//构造方法,传入Packet对象和MainFrame
public ThreadPacket(Packet packet,MainFrame mainFrame)
{
this.packet=packet
this.mainFrame=mainFrame
}
//调用start()时
public void run()
{
if (packet instanceof IPPacket) //如果该数据包为IPPacket类
{
IPPacket ipPacket=(IPPacket)packet//还原为本来的类型
insertIPPacket(ipPacket)//把该数据包插入数据库
String packetStr="ident:"+ipPacket.ident+"\n协议:IP"+" 源IP地址:"+ipPacket.src_ip+" 目的IP地址:"+ipPacket.dst_ip+"\n内容:"+ipPacket.data//获取IPPacket的成员到字符串
mainFrame.jTextArea1.append(packetStr+"\n\n")//把该字符串添加到文本域
}
if(packet instanceof TCPPacket) //如果该数据包为TCPPacket
{
TCPPacket tcpPacket=(TCPPacket)packet
insertTCPPacket(tcpPacket)//插入数据库
String packetStr="ident:"+tcpPacket.ident+"\n协议:TCP"+" 源端口:"+tcpPacket.src_port+" 目的端口:"+tcpPacket.dst_port+"\n内容:"+tcpPacket.data//获取TCPPacket的成员到字符串
mainFrame.jTextArea1.append(packetStr+"\n\n")//把该字符串添加到文本域
}
if(packet instanceof UDPPacket) //如果该数据包为UDPPacket
{
UDPPacket udpPacket=(UDPPacket)packet//还原为本来的类型
insertUDPPacket(udpPacket)//把该数据包插入数据库
String packetStr="ident:"+udpPacket.ident+"\n协议:UDP"+" 源端口:"+udpPacket.src_port+" 目的端口:"+udpPacket.dst_port+"\n内容:"+udpPacket.data//获取UDPPacket的成员到字符串
mainFrame.jTextArea1.append(packetStr+"\n\n")//把该字符串添加到文本域
}
if(packet instanceof ICMPPacket) //如果该数据包为ICMPPacket
{
ICMPPacket icmpPacket=(ICMPPacket)packet//还原为本来的类型
insertICMPPacket(icmpPacket)//把该数据包插入数据库
String packetStr="ident:"+icmpPacket.ident+"\n协议:ICMP"+" 源IP地址:"+icmpPacket.src_ip+" 目的IP地址:"+icmpPacket.dst_ip+"\n内容:"+icmpPacket.data//获取ICMPPacket的成员到字符串
mainFrame.jTextArea1.append(packetStr+"\n\n")//把该字符串添加到文本域
}
顺便把这段也注释一下,谢谢:
//以下方法就是把数据包插入数据库的实现
private void insertTCPPacket(TCPPacket tcpPacket)
{
try{
Connection con=PacketConnect.getconn()//返回一个与特定数据库的连接
Statement stmt=con.createStatement()//创建一个 Statement 对象来将 SQL 语句发送到数据库
String insertString="insert into tcpPacket (SourceIP,SourcePort,DestinationIP,DestinationPort,Ack,Ack_num,Psh,Rst,Syn,Sequence,Ident,Urgent_pointer) values ('"+
tcpPacket.src_ip+"',"+tcpPacket.src_port+",'"+tcpPacket.dst_ip+"',"+tcpPacket.dst_port+","+tcpPacket.ack+","+tcpPacket.ack_num+","+tcpPacket.psh+","+
tcpPacket.rst+","+tcpPacket.syn+","+tcpPacket.sequence+","+tcpPacket.ident+","+tcpPacket.urgent_pointer+")"
//SQL插入语句.表为tcpPacket,接下来是行, values后面括号里的是插入的数据(对应行).
stmt.executeUpdate(insertString)//执行插入数据的SQL语句
}
catch(SQLException ee){
System.out.println("TCPPacket insert Error!")//异常处理
}
finally{ //最终执行
PacketConnect.close(stmt)//释放此Statement对象的数据库和JDBC资源
PacketConnect.close(con)//释放此Connection对象的数据库和JDBC资源
}
}
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)