В jnetpcap, как я могу получить информацию DNS-запроса пакета?
Я использую библиотеку jnetpcap для чтения файла PCAP и получения необходимой информации.
Я могу получить данные IP, UDP и HTTP из пакета, но как именно я могу получить данные DNS-запросов?
Мой код выглядит так
public class PcapFile { //extends Activity
private static ArrayList<String>
ethData = new ArrayList<>(),
ipData = new ArrayList<>(),
httpData = new ArrayList<>(),
udpData = new ArrayList<>();
public static void SetPcapData(String directory){
final StringBuilder errbuf = new StringBuilder();
//archivo cargara en memoria el paquete .pcap
Log.i("Abriendo PCAP desde", directory);
Pcap pcapfile = Pcap.openOffline(directory, errbuf);
if (pcapfile == null) {
Log.e("Error al abrir PCAP", errbuf.toString());
}
Ethernet eth = new Ethernet();
Http http = new Http();
Ip4 ip = new Ip4();
Tcp tcp = new Tcp();
Udp udp = new Udp();
PcapHeader hdr = new PcapHeader(JMemory.POINTER);
//PcapPacket packet = new PcapPacket(JMemory.POINTER);
JBuffer buf = new JBuffer(JMemory.POINTER);
assert pcapfile != null;
int id = JRegistry.mapDLTToId(pcapfile.datalink());
int contIP, contETH, contHTTP, contHTTP_HOST, contHTTP_URL;
contIP = contETH = contHTTP_HOST = contHTTP_URL = 1;
while(pcapfile.nextEx(hdr, buf) == Pcap.NEXT_EX_OK){
PcapPacket packet = new PcapPacket(hdr, buf);
packet.scan(id);
String str;
if(packet.hasHeader(eth)){
str = eth.toString();
ethDatan.add(str);
}
if(packet.hasHeader(http)){
str = http.toString();
httpData.add(str);
}
if(packet.hasHeader(ip)){
str = ip.toString();
tcpDataDestination.add(str);
tcpDataSource.add(str);
}
if(packet.hasHeader(udp)) {
str = udp.toString();
udpData.add(str);
}
}
pcapfile.close();
}
Я пытался, но я не понимаю структуру DNS-запроса или как организовать HTTP, UDP и IP, чтобы получить информацию, которая мне нужна. Я обнаружил, что DNS-запрос работает в порту 53, это правильно? У jnetpcap нет типа переменной DNS для получения запросов, поэтому мне нужна помощь, я не знаю, если только с IP и UDP можно получить доступ к информации запроса.
В NetworkMiner данные DNS выглядят так