我必须创建一个嗅探学校本地网络的程序。我选择使用Java,发现可以使用jpcap捕获数据包。 因此,我想遵循jpcap的github中提供的示例之一,看来我只能找到自己的数据包。
就像我说的那样,我已经看过代码并选择了我的wifi接口。该程序正在捕获数据包,我将所有源IP地址都放在一个文本文件中以运行一些测试。我还创建了一个哈希映射,该哈希映射是我执行arp -a时找到的IP地址的。从我在线阅读的内容来看,该命令向您显示了网络中的IP地址。我创建了一个布尔值设置为false,然后继续运行遍历文本文件的循环,并查看该IP地址是否在hashMap中:if地址之一出现在哈希图中,布尔值将更改为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();
}
}
有人可以帮我弄清楚为什么它不起作用吗? 非常感谢您的帮助
答案 0 :(得分:0)
之所以无法捕获更多数据包,是因为您需要处于混杂模式或原始模式的接口,我建议您使用适当的嗅探器(例如Wireshark)来检查是否有其他未发送给您的数据包可以被捕获。如果不是,则意味着您需要应用mitm方法,因为您处于通勤网络中。为了便于使用,wifi上的代码应该足以在监控模式下用作接口(请检查aircrack-ng套件)。
在基于GNU / Linux的Debian系统中,可以使用命令iw dev wlan0 interface add mon0 type monitor
(来自无线工具包)