导航:首页 > 文件教程 > jpcap获取包文件内容

jpcap获取包文件内容

发布时间:2023-07-25 17:53:51

1. java如何编程实现,获取固定IP发来所有的数据包

额。。。初看到你的问题的时候吓了一跳。还以为是用java实现网络嗅探呢。
你问的是socket编程?
那么socket 均分为两个,
一部分是服务端,
一部分是客户端,
服务端一直开启着监听,
现在你的情况和平时不太一样的是,平时,是服务端的ip不变化,而客户端的变化。而是客户端给服务端进行发送。
你的情况是相反。客户端经常变动ip或者端口,而要求服务端发送。
其实转换一下思路就好了。
有点类似于现在网页在线聊天工具里的“长连接”思想。
你的那个固定ip服务器,可以完全不管,你是什么端口。因为,如果你的电脑准备好接受数据了。那么你就向服务端发起请求。而服务端将结果发送给你。就是说,不是说服务器一直给你发送,而是,你这个客户端只要准备好接受数据,就向服务器发送请求。这样,不是没有问题了么。。

如果还按你那个思路就是,你的电脑,需要实现网络嗅探的部分功能。但是

Java是网络层以上的。
你通过Java的Socket得到的数据包嗅探不出什么敏感的东东了。
所以Java不适合做网络嗅探。

不过还好,现在有了叫jpcap的工具。你可以搜一下,
下面是一个简单的实现,里面获得了来源的ip和端口 你可以加一个判断,如果来源ip是固定的ip的话,那么,你可以获取对应的数据包

程序用eclipse编辑在J2SDK6.0+WinPcap 3.1+Jpcap 0.5下编译运行

/*******************
* JpcapTip.java
*/
package m;

import jpcap.PacketReceiver;
import jpcap.JpcapCaptor;
import jpcap.packet.*;
import jpcap.NetworkInterface;
import jpcap.NetworkInterfaceAddress;
//import java.net.InetAddress;
//import java.net.UnknownHostException;

public class JpcapTip implements PacketReceiver {

public void receivePacket(Packet packet) {
System.out.println("********************************************");
/*IP数据报报文头*/
byte[] l=packet.header;
/*
for (int t=0;t<21;t++){
System.out.print(l[t]+" *** ");
}
*/
String str="";
System.out.print("报文头 : ");
for (int i=0;i<l.length;i++) {
//str=str+l;
int m=0;
m=l[i];
m=m<<24;
m=m>>>24;
str=str+Integer.toHexString(m);
//System.out.print(" *** "+l[i]);
}
System.out.println(str);
int d=l.length;
System.out.println("首部长度 :"+(d*8)+"bit");

/*分析源IP地址和目的IP地址*/
/*分析协议类型*/
/**
if(packet.getClass().equals(IPPacket.class)) {
IPPacket ipPacket=(IPPacket)packet;
byte[] iph=ipPacket.option;
String iphstr=new String(iph);
System.out.println(iphstr);
}
*/
if(packet.getClass().equals(ARPPacket.class))
{
System.out.println("协议类型 :ARP协议");
try {
ARPPacket arpPacket = (ARPPacket)packet;
System.out.println("源网卡MAC地址为 :"+arpPacket.getSenderHardwareAddress());
System.out.println("源IP地址为 :"+arpPacket.getSenderProtocolAddress());
System.out.println("目的网卡MAC地址为 :"+arpPacket.getTargetHardwareAddress());
System.out.println("目的IP地址为 :"+arpPacket.getTargetProtocolAddress());

} catch( Exception e ) {
e.printStackTrace();
}
}
else
if(packet.getClass().equals(UDPPacket.class))
{
System.out.println("协议类型 :UDP协议");
try {
UDPPacket udpPacket = (UDPPacket)packet;
System.out.println("源IP地址为 :"+udpPacket.src_ip);
int tport = udpPacket.src_port;
System.out.println("源端口为:"+tport);
System.out.println("目的IP地址为 :"+udpPacket.dst_ip);
int lport = udpPacket.dst_port;
System.out.println("目的端口为:"+lport);
} catch( Exception e ) {
e.printStackTrace();
}
}
else
if(packet.getClass().equals(TCPPacket.class)) {
System.out.println("协议类型 :TCP协议");
try {
TCPPacket tcpPacket = (TCPPacket)packet;
int tport = tcpPacket.src_port;
System.out.println("源IP地址为 :"+tcpPacket.src_ip);
System.out.println("源端口为:"+tport);
System.out.println("目的IP地址为 :"+tcpPacket.dst_ip);
int lport = tcpPacket.dst_port;
System.out.println("目的端口为:"+lport);
} catch( Exception e ) {
e.printStackTrace();
}
}
else
if(packet.getClass().equals(ICMPPacket.class))
System.out.println("协议类型 :ICMP协议");
else
System.out.println("协议类型 :GGP、EGP、JGP协议或OSPF协议或ISO的第4类运输协议TP4");

/*IP数据报文数据*/
byte[] k=packet.data;
String str1="";
System.out.print("数据 : ");
for(int i=0;i<k.length;i++) {
//int m=0;
//m=k[i];
//m=m<<24;
//m=m>>>24;
//str1=str+Integer.toHexString(m);
str1 = new String(k);
//str1=str1+k[i];
//System.out.print(" *** "+k[i]);
}
System.out.println(str1);
System.out.println("数据报类型 : "+packet.getClass());

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

public static void main(String[] args) throws Exception{
// TODO 自动生成方法存根

NetworkInterface[] devices = JpcapCaptor.getDeviceList(); //.getDeviceList();.
//for (int i =0; i<devices.length;i++) {
int a=0;
//try {
/*本地网络信息*/
byte[] b=devices[1].mac_address; //网卡物理地址
//}
//catch() {}
System.out.print("网卡MAC : 00");
for (int j=0;j<b.length;j++){
//a=a<<8;
a=b[j];
a=a<<24;
a=a>>>24;
System.out.print(Integer.toHexString(a));
}
System.out.println();
NetworkInterfaceAddress[] k=devices[1].addresses;

//System.out.println("网卡MAC : "+Integer.toHexString(a));
for(int n=0;n<k.length;n++) {
System.out.println("本机IP地址 : "+k[n].address); //本机IP地址
System.out.println("子网掩码 : "+k[n].subnet); //子网掩码
}
System.out.println("网络连接类型 : "+devices[1].datalink_description);
//}
NetworkInterface deviceName = devices[1];
/*将网卡设为混杂模式下用网络设备deviceName*/
JpcapCaptor jpcap =JpcapCaptor.openDevice(deviceName, 2000, false, 1); //openDevice(deviceName,1028,false,1);
jpcap.loopPacket(-1,new JpcapTip());
}

}

加油~~

2. 统计TCP流量,jpcap抓包时,通过loopPacket()方法,笔记本的有限网卡抓不包,而无线网可以,这是为什么

( 1) 捕获原始数据报, 包括共享网络上各主机发送/ 接收的以及相互之间交换的数据专报;
( 2) 在数据报发往属应用程序之前, 按照自定义的规则将某些特殊的数据报过滤掉;
( 3) 在网络上发送原始的数据报;
( 4) 收集网络通信过程中的统计信息。

3. java编程:听说有个叫网络嗅探器的东西,请问原理是 怎么做出来的啊

Sniffer啊,自己去查,不想大片转贴了。
主要原理是利用网卡的混杂模式,和以太网自身的特点进行的。
java写的话用 JPACAP

Jpcap是一个能够抓取与发送网络数据包的Java组件。可以使用Jpcap从一个网络接口获取数据包,然后在Java中对它们进行分析和显示。同样也可以通过一个网络接口发送任意数据包。Jpcap当前能够 捕获以太网,IPv4,IPv6,ARP/RARP,TCP,UDP和ICMPv4数据包。
Jpcap实际上并非一个真正去实现对数据链路层的控制,而是一个中间件,Jpcap调用wincap/libcap,而给Java语言提供一个公共的接口,从而实现了平台无关性。在官方网站上声明,Jpcap支持FreeBSD3.x,Linux RedHat6.1, Fedora Core4,Solaris,and Microsoft Windows 2000/XP等系统
Jpcap的整个结构大体上跟wincap/libpcap是很相像的,例如NetworkInterface类对应wincap的 typedef struct_ADAPTER ADAPTER,getDeviceList()对应pcap_findalldevs()等等。
Jpcap主要的类有如下几个:
1.NetworkInterface
该类的每一个实例代表一个网络设备,一般就是网卡。这个类只有一些数据成员,除了继承自java.lang.Object的基本方法以外,没有定义其它方法。
2.JpcapCaptor
该类提供了一系列静态方法实现一些基本的功能。该类一个实例代表建立了一个与指定设备的链接,可以通过该类的实例来控制设备,例如设定网卡模式、设定过滤关键字等等。
3.JpcapSender
该类专门用于控制数据包的发送。
4.Packet
这个是所有其它数据包类的父类。Jpcap所支持的数据包有:
ARPPacket、DatalinkPacket、EthernetPacket、ICMPPacket、IPPacket、TCPPacket、UDPPacket。

4. 我想要一个jpcap写的抓包的小程序和一个发送IP数据包的小程序 不胜感激

摘抄他人的,在此共享了
开发工具:MyEclipse 6.5
JDK1.6

jpcap版本 : jpcap0.7

动态库:jpcap.dll 、 wpcap.dll 、packet.dll 动态库放到System32下

jar包: jpcap.jar 加入到类路径下

本人机器接在一台交换机上,其他机器也接在这台交换机上

以下为开发代码

try {
devices = JpcapCaptor.getDeviceList();//得到本机的网卡设备
// if true,the inferface becomes promiscuous mode(混杂模式)
captor = JpcapCaptor.openDevice(devices[0], 1024 * 10, true, 2000);//设为混合模式
captor.loopPacket(-1, handler );//循环获取包
} catch (Exception e) {
System.out.println(e.getMessage());
}

private static PacketReceiver handler = new PacketReceiver() {
public void receivePacket(Packet packet) {
if (packet instanceof TCPPacket) {

TCPPacket tcp = (TCPPacket) packet;
InetAddress srcip = tcp.src_ip;
InetAddress dstip = tcp.dst_ip;

System.out.println("===================================");
System.out.println("TCP");
EthernetPacket ether = (EthernetPacket) tcp.datalink;
System.out.println("源IP:" + tcp.src_ip + " 目的IP:"
+ tcp.dst_ip + " 源端口:" + tcp.src_port + " 目的端口:"
+ tcp.dst_port);
System.out.println("源MAC:" + ether.getSourceAddress()
+ " 目的MAC:" + ether.getDestinationAddress());
System.out.println("协议:" + tcp.protocol);

}
}

};

运行结果如下:

TCP
源IP:/198.20.19.70 目的IP:/198.20.17.6 源端口:56914 目的端口:15002
源MAC:00:1f:d0:1d:ce:93 目的MAC:00:00:5e:00:01:1b
TCP
源IP:/198.20.17.6 目的IP:/198.20.19.70 源端口:15002 目的端口:56914
源MAC:00:0f:e2:3f:14:e8 目的MAC:00:1f:d0:1d:ce:93
TCP
源IP:/198.20.19.70 目的IP:/198.20.17.6 源端口:56914 目的端口:15002
源MAC:00:1f:d0:1d:ce:93 目的MAC:00:00:5e:00:01:1b
TCP
源IP:/198.20.17.6 目的IP:/198.20.19.70 源端口:15002 目的端口:56914
源MAC:00:0f:e2:3f:14:e8 目的MAC:00:1f:d0:1d:ce:93
TCP
源IP:/198.20.19.70 目的IP:/198.20.17.6 源端口:56914 目的端口:15002
源MAC:00:1f:d0:1d:ce:93 目的MAC:00:00:5e:00:01:1b
…………

我机器的IP为:198.20.19.70

阅读全文

与jpcap获取包文件内容相关的资料

热点内容
linux连接ftp 浏览:512
es文件浏览器视频笔记 浏览:874
mac无法打开描述文件 浏览:134
什么软件打文件 浏览:53
数据库无数据变成0 浏览:899
名企笔试如何刷编程题 浏览:49
js跳到页面某地 浏览:550
jsp展示clob字段 浏览:779
nyx在网络上是什么意思 浏览:145
乐播农业app是什么 浏览:530
编程框架如何开发 浏览:136
金庸群侠传3修改代码 浏览:712
检察院的文件类别有哪些 浏览:793
怎么把九游残留数据删除 浏览:828
有什么女生主动聊天的app 浏览:436
有哪些可以督促自己的app 浏览:244
用USB传输视频文件夹显示为空 浏览:710
恢复文件软件免费版手机 浏览:648
lg怎么隐藏文件 浏览:836
苹果免费读书app推荐 浏览:497

友情链接