因此,對於一個特定的任務,我問搜索並打印捕獲UDP DNS數據包的UDP包分析
請求和響應(對協議字段)
。
現在我對網絡編程非常陌生,我試圖用JNetPcap Library來實現這一點。但請注意,問題是不是約JNetPcap函數。
我從我的程序(可以修改)中得到的輸出結果是viz。
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
那麼什麼request and response
這裏?如果我的輸出不完整,我需要打印哪些字段以獲取請求和響應?
編輯:我不嗅探任何特定的應用程序。我被要求在整個網絡中嗅探網絡(如在我們的機器中運行軟件,這就是全部),並找到請求和響應。 謝謝。
額外的信息可能相關:
所以過濾我使用這個代碼(的代碼可能不需要的問題 UDP DNS數據包,但我包括它萬一我做錯了什麼):
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;
}
在這裏我分析了前10個數據包,
// Receive packet from the loop
PcapPacketHandler<String> jpacketHandler = packet_handler();
// capture first 10 packages
pcap.loop(10, jpacketHandler, "");
這就是我如何打印上面給出的示例輸出:
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());
您沒有獲得完整的DNS數據包 - 事實上,如果這8個字節只是UDP標頭,那麼您根本沒有獲得任何DNS有效負載。最小的合法DNS有效負載是12字節(根據RFC 1035) – Alnitak
啊,看着你的代碼,你打印的是錯誤的值 - 你的字符串表示你正在打印數據包的長度,但實際上你打印的是UDP頭長度。 – Alnitak