, für eine bestimmte Aufgabe, die ich gefragt werde, suchen und drucken Sie dieUDP Packet Analysis
Anfrage und Antwort (für Protokollfelder)
für gefangene UDP DNS-Pakete.
Jetzt bin ich sehr neu zu Netzwerk-Programmierung und ich habe versucht, dies mit der JNetPcap Library zu erreichen. Beachten Sie jedoch, dass die Frage nicht über JNetPcap Funktionen ist.
Die Beispielausgaben, die ich von meinem Programm bekomme (das geändert werden kann) ist nämlich.
Got UDP Packet
Name of packet :Udp
The Source :14786
The Destination :53
The Legnth of packet :8
Got UDP Packet
Name of packet :Udp
The Source :58186
The Destination :53
The Legnth of packet :8
So was ist derrequest and response
hier? Wenn meine Ausgabe unvollständig ist, welche Felder muss ich drucken, um die Anfrage und die Antwort zu erhalten?
Bearbeiten: Ich schnüffle keine bestimmte Anwendung. Ich werde gebeten, das Netzwerk zu schnüffeln (wie in, in Ihrer Software in unserer Maschine laufen und das ist alles) als Ganzes und finden Sie die Anfrage und Antwort. Danke.
Zusätzliche Informationen, die relevant sein können:
Also diesen Code verwende ich UDP DNS-Pakete zu filtern (der Code für die Frage nicht, aber ich bin auch ich es nur für den Fall erforderlich habe etwas falsch gemacht):
PcapBpfProgram program = new PcapBpfProgram();
String expression = "udp dst port 53";
int optimize = 0; // 0 = false
int netmask = 0xFFFFFF00; // 255.255.255.0
if (pcap.compile(program, expression, optimize, netmask) != Pcap.OK) {
System.err.println(pcap.getErr());
return;
}
Hier analysiere ich die ersten 10 Pakete viz.
// Receive packet from the loop
PcapPacketHandler<String> jpacketHandler = packet_handler();
// capture first 10 packages
pcap.loop(10, jpacketHandler, "");
Und das ist, wie ich die Beispielausgabe oben angegebenen Druck:
public static PcapPacketHandler<String> packet_handler() {
PcapPacketHandler<String> jpacketHandler = new PcapPacketHandler<String>() {
Udp udp = new Udp();
@Override
public void nextPacket(PcapPacket packet, String user) {
// Another check to determine if packet is UDP.
if (!packet.hasHeader(udp)) {
// not UDP? skip
}
// Yet another check to determine if packet is UDP.
if (packet.hasHeader(udp)) {
System.out.println("Got UDP Packet");
System.out.println("Name of packet :" + packet.getHeader(udp).getName());
System.out.println("The Source :" + packet.getHeader(udp).source());
System.out.println("The Destination :" + packet.getHeader(udp).destination());
System.out.println("The Check sum :" + packet.getHeader(udp).checksum());
System.out.println("The Legnth of packet :" + packet.getHeader(udp).getHeaderLength());
Sie erhalten keine vollständigen DNS-Pakete - wenn diese 8 Bytes nur der UDP-Header sind, erhalten Sie überhaupt keine DNS-Nutzdaten. Die kleinste zulässige DNS-Nutzlast beträgt 12 Byte (nach RFC 1035). – Alnitak
Ah, wenn Sie Ihren Code betrachten, drucken Sie den falschen Wert - Ihre Zeichenfolge besagt, dass Sie die Länge des Pakets drucken, aber Sie drucken tatsächlich den UDP-Header Länge. – Alnitak