java - 嗅探局域网:Jpcap java 程序似乎只捕获我的数据包
问题描述
我必须创建一个程序来嗅探学校的本地网络。我选择使用 Java 并发现您可以使用 jpcap 捕获数据包。所以我想遵循 jpcap 的 github 中提供的示例之一,似乎我只能找到自己的数据包。
就像我说的,我查看了代码并选择了我的 wifi 接口。该程序正在捕获数据包,我将所有源 IP 地址放在一个文本文件中以运行一些测试。我还创建了一个哈希图,其中包含我在执行 arp -a 时找到的 IP 地址。根据我在网上阅读的内容,此命令向您显示网络中的 IP 地址。我创建了一个设置为 false 的布尔值,然后我继续运行一个循环遍历文本文件并查看 IP 地址是否在 hashMap 中:如果其中一个地址出现在哈希图中,布尔值将更改为 true,这意味着我已经设法抓住了一些东西。运行测试后,布尔值是假的。
这是示例代码
``public class PacketCaptor {
private static final int INFINITE = -1;
private static final int PACKET_COUNT = INFINITE;
/*
private static final String HOST = "203.239.110.20";
private static final String FILTER =
"host " + HOST + " and proto TCP and port 23";
*/
private static final String FILTER =
// "port 23";
"";
public static void main(String[] args) {
try {
if(args.length == 1){
PacketCaptor sniffer = new PacketCaptor(args[0]);
} else {
System.out.println("Usage: java Sniffer [device name]");
System.out.println("Available network devices on your machine:");
String[] devs = PacketCapture.lookupDevices();
for(int i = 0; i < devs.length ; i++)
System.out.println("\t" + devs[i]);
}
} catch(Exception e) {
e.printStackTrace();
}
}
public PacketCaptor(String device) throws Exception {
// Initialize jpcap
PacketCapture pcap = new PacketCapture();
System.out.println("Using device '" + device + "'");
pcap.open(device, true);
//pcap.setFilter(FILTER, true);
pcap.addPacketListener(new PacketHandler());
System.out.println("Capturing packets...");
pcap.capture(PACKET_COUNT);
}
}
class PacketHandler implements PacketListener
{
WritingClass writing = new WritingClass();
public void packetArrived(Packet packet) {
try {
// only handle TCP packets
if(packet instanceof TCPPacket) {
TCPPacket tcpPacket = (TCPPacket)packet;
byte[] data = tcpPacket.getTCPData();
String srcHost = tcpPacket.getSourceAddress();
String dstHost = tcpPacket.getDestinationAddress();
String isoData = new String(data, "ISO-8859-1");
System.out.println(srcHost+" -> " + dstHost + ": " + isoData);
String datas = srcHost+"|"+dstHost+"|";
writing.write(datas, this.writing.getFileName());
}
} catch( Exception e ) {
e.printStackTrace();
}
}
谁能帮我弄清楚为什么它不起作用?非常感谢你的帮助
解决方案
您无法捕获更多数据包的原因是因为您需要一个处于 promisc 或 raw 模式的接口,我建议您使用像 wireshark 这样的适当嗅探器来检查是否可以捕获其他不发给您的数据包。如果不是,则意味着您需要应用 mitm 方法,因为您处于通勤网络中。为了在 wifi 上使用该代码,在监控模式下的接口应该足够了(检查 aircrack-ng 套件)。在基于 GNU/Linux Debian 的系统中,可以使用命令iw dev wlan0 interface add mon0 type monitor
(来自无线工具包)
推荐阅读
- ios - 任何人都知道如何动画这个?
- tensorflow - multi_gpu_model : 'NoneType' 类型的对象没有 len()
- batch-file - 使用 WinSCP 和 Windows 批处理文件从单独的文件中读取 SFTP 凭据
- javascript - 为移动/小屏幕设备禁用 addEventListener
- c++ - avr-libc 和 stdio.h - 类似函数的宏导致错误:“do”之前的预期 unqualified-id
- reactjs - 演示组件在屏幕之间移动时被缓存
- css - 电子应用中的链接样式
- git - 将主分支合并到我的分支不起作用
- c++ - 给定任意数量的整数,如何创建唯一键?并使用该密钥存储并稍后从地图中查找
- vue.js - Uncaught ReferenceError: module is not defined at build.js:1 vuejs, webpack, SSR(我使用了 npm script-loader 但没用)