Мне нужно создать программу, которая нюхает локальную сеть для школы. Я решил работать с Java и обнаружил, что вы можете захватывать пакеты с помощью jpcap.
Поэтому я хотел последовать одному из примеров, представленных в github jpcap, и мне кажется, что я могу найти только свои собственные пакеты.
Как я уже сказал, я посмотрел код и выбрал свой интерфейс Wi-Fi. Программа захватывает пакеты, и я поместил все исходные IP-адреса в текстовый файл для запуска некоторых тестов. Я также создал хэш-карту ip-адресов, которые я нашел, когда сделал arp -a. Из того, что я прочитал в сети, эта команда показывает вам IP-адреса в вашей сети. Я создал логическое значение со значением false, а затем приступил к выполнению цикла, который просматривает текстовый файл и проверил, был ли IP-адрес в hashMap: if один из адресов появился в 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();
}
}
Может кто-нибудь помочь мне понять, почему это не работает?
Большое спасибо за вашу помощь