Java jpcap包嗅探
我在jpcap库的帮助下在java中嗅探以太网(eth0)上的数据包。。。所以,在我的项目中,我有一个JpcapCaptorJava jpcap包嗅探,java,libpcap,tcpdump,packet-sniffers,jpcap,Java,Libpcap,Tcpdump,Packet Sniffers,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,
//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();
}
}
但是有一个问题数据包。数据是一个字节[]。。。控制台将其打印为
STRING W�xQ�� !"#$%&'()*+,-./01234567
STRING W�xQ�� !"#$%&'()*+,-./01234567
STRING W�xQ�� !"#$%&'()*+,-./01234567
据我所知,这是因为编码问题???解决这个问题的办法是什么
据我所知,这是因为编码的问题
这可能是正确的。也可能是你试图转换成字符串的东西根本不是文本。事实上,如果您嗅探到的是一个原始网络数据包,则可以保证某些数据包(IP/ICMP数据包头)不会是文本
这个问题的解决办法是什么
解决方案是理解您试图解码的内容,以及是否适合将其解码为编码文本。如果没有,您需要以不同的方式解码/显示它。。。取决于相关RFC对您试图显示的数据包的说明。这是一个编码问题,但可能不是您认为的方式。这基本上表明,无论呈现文本的是什么,都没有字符的表示。就你的代码而言,我看没有错。你在哪里展示这个?你试过没有指定编码吗?是的,我试过。。。在没有编码的情况下,这个问题刚刚出现,我就开始用编码来解决(((我在控制台或Ubuntu终端上的eclipse中显示它…然后在您的平台上的字符集中根本没有人类可读的字符来显示这些文本位JPCAP与-ngrep-W byline或tcpdump或smth else做了相同的事情…所以这些嗅探器向我们显示了带有文件的数据包体:from:…to:…等等。是的…假设这些字段实际上是二进制数据,而不是文本。如果是这样的话,那么试图将它们作为(编码的)文本来处理就会产生你在这里看到的垃圾。