[英]jpcap.packet.Packet cannot be cast to jpcap.packet.TCPPacket
[英]Packet sniffering by jpcap
我借助於jpcap庫在Java中嗅探以太網(eth0)上的數據包...因此,在我的項目中,我有一個JpcapCaptor ...
//Open an interface with openDevice(NetworkInterface intrface, int snaplen, boolean promics, int to_ms)
JpcapCaptor captor=JpcapCaptor.openDevice(devices[index], 65535, false, 20);
captor.setFilter("icmp", true);
captor.loopPacket(-1, new PacketPrinter());
然后我有數據包打印機,它可以打印嗅探到的數據包的主體...
public class PacketPrinter implements PacketReceiver {
@Override
public void receivePacket(Packet packet) {
InputStream is = new ByteArrayInputStream(packet.data);
try {
String sstr = IOUtils.toString(is, "UTF-8");
System.out.println("STRING " + sstr);
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
String ss;
try {
ss = new String(packet.data, "UTF-8");
System.out.println("STRING " + ss);
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
但是有一個問題... packet.data是一個byte [] ...控制台將其打印為
STRING W�xQ�� !"#$%&'()*+,-./01234567
STRING W�xQ�� !"#$%&'()*+,-./01234567
STRING W�xQ�� !"#$%&'()*+,-./01234567
據我了解,這是因為編碼問題??? 解決此問題的解決方案是什么?
據我了解,這是因為編碼問題嗎?
那可能是正確的。 也可能是您要變成字符串的東西根本不是文本。 實際上,如果那是您嗅探到的原始網絡數據包,則幾乎可以保證某些數據包(IP / ICMP數據包頭) 不會是文本。
這個問題有什么解決方案?
解決方案是了解您要嘗試解碼的內容以及將其解碼為編碼文本是否合適 。 如果不是,則需要以不同的方式解碼/顯示它...取決於相關RFC關於您試圖顯示的數據包的說法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.