Afficher les packet (java)

Fermé
hjbb - 23 avril 2012 à 13:02
 hjbb - 23 avril 2012 à 15:56
Bonjour,

j'ai voulu afficher le corps d'un paquet avec la bib "jpcap" (Java), mais le resultat obtenu est incompréhensible, j'ai voulu le traduire en binaire ( ou chaine de caractere)

Code:
package sn;

import jpcap.PacketReceiver;
import jpcap.packet.Packet;

/**
*
* @author Ruchira
*/
public class PacketPrinter implements PacketReceiver{
private String str;
StringBuffer sb = new StringBuffer();


public void receivePacket(Packet p) {
System.out.println("Paket :"+p.data.toString());
int i=0;
String ch=new String();
ch = Integer.toString(i);
//============= je l'ai trouvé dans l'internet
byte[] bytes=new byte[p.header.length + p.data.length];
System.arraycopy(p.header, 0, bytes, 0, p.header.length);
System.arraycopy(p.data, 0, bytes, p.header.length, p.data.length);

StringBuffer buffer = new StringBuffer();
for(i=0;i<bytes.length;){
for(int j=0;j<8 && i<bytes.length;j++,i++){
String d = Integer.toHexString((int)bytes[i]&0xff);
buffer.append((d.length()==1?"0"+d:d)+" ");
if(bytes[i]<32 || bytes[i]>126){
bytes[i]=46;
}
}
}


str=buffer.toString();
StringBuffer textArea = new StringBuffer();
textArea.append(str);
for(i=0;i<str.length()-1;i+=2){
String output=str.substring(i, (i+2));
int decimal=Integer.parseInt(output, 16);
sb.append((char)decimal);
}
str=sb.toString();
System.out.println("Paket' :"+str);
//=================================================
}
}
//=====================================================

le resultat:

Paket :[B@12d15a9
Paket :[B@e91f5d
Paket :[B@10a3b24
Paket :[B@b0ce8f
Paket :[B@1c92535

A voir également:

2 réponses

KX Messages postés 16754 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 3 020
Modifié par KX le 23/04/2012 à 13:18
Ton problème vient de p.data.toString() qui ne donne pas ce que tu veux. En effet ce que tu obtiens correspond à la méthode toString de la classe Object, car elle n'est pas redéfini pour les tableaux ("[B" correspond au nom de la classe des byte[]).
Le mieux pour ton affichage serait d'utiliser le constructeur String(byte[]) :

System.out.println("Paket : "+new String(p.data));
La confiance n'exclut pas le contrôle
0
Merci KX, mais le pb n'est pas resolu...
Mais je veux les voir en binaires
0
KX Messages postés 16754 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 3 020
23 avril 2012 à 14:49
Dans ce cas tu vas devoir lire le tableau case par case et afficher les codes binaire de chaque byte :

System.out.printn("Packet : ");
for (byte b : p.data)
    System.out.print(Integer.toString(b,2));
System.out.println();
0
merci kx, pour votre aide... :)
resulat:

Packet : -10010-1000011-1111111-100000000101101000010001111000011111101001110111110100111101001110100110010111100101111000111101111110110100101-10000001100010101001101-11011100111101001110011111001111011001100101111110100111011111010011110100111010011001011110010111100011110111111011011111100101110010011001111100101110101111001011111001111101110110010111101000-1000000101011010101001011100001001010110111001011101011100101100111101111110011110101100001110101111000011101101110000111010011100101110010011001111100101-10000001000100-1000000101010101010001111010010100001111101110111-1000000101101101001001011101010101101111011101101001100111-10000001011101-1000000101101101001001011101010101101111011101100101100111-10000001011101-1000000101101101001001011101010101101111011101101011100111-10000001011101-1000000101101101001001011101010101101111011101100001100111-10000001011101-1000000101101101001001011101010101101111011101100011100111-10000001011101-1000000101101101001001011101010101101111011101101101100111-10000001011101-1000000101101101001001011101010101101111011101100111100111-10000001011101-1000000101101101001001011101010101101111000011100001100111-10000001011101-11111110001110001001101-10100001000010101010100110-100000110010-100000-10111011011011-1111000-1100110-101001110-111011-1000000-1000100010100111011-10011110100-101011-10-1011110-1000000-110010010100100101-1000101001001111-11101001010000-1000010-1000000-11010000101001000110-11111110100-101011-10-1011101-1000000-11100101001111111011001001010100-1001010-1110011-1000000-111101001010011011-100010101001010100-1001010-1110000-1000000-1010110010100-110011011110001001001111-11101001010000-1000010-1000000-100000010100111011-110010101001001111-11101001010000-1000011
Packet : -1011001-110101100100000011111101111100101110000111101001101000110010111100101111100101110010011010011110100110100111011111101110111100011110111011011101111000111101111110110100101
Packet : -1011001-110101-1111111-1000000001010001101111111101111100101110000111101001101000110010111100101111100101110010011010011110100110100111011111101110111100011110111011011101111000111101111110110100101-1000000110001010100100010101111110111110010111000011110100110100011001011110010-100000011100-10000001101010101001000100-1100011-1011010-111101110101-10000001101010101001000100-1100011-1011010-1000001110101-10000001101010101001000100-1100011-1011010-1000001110110-100000011100010010101111001-110010010100111101110111001111000110101110100110100111011011100101111011111000011110010110111011001011110010111101110110010111101000-100000011100010010101111001-11001001101111011101110011110011-10000001111111-100000011100010010101111001-11001001101111011101110011110101-10000001111111-100000011110110101000-10010010100-11010010010101101100-10010-1000000-11001010101000-10010010100-1110011111000100-10010-1000000-10100110101000-10010010100-11010010010101101101-10010
0
KX Messages postés 16754 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 3 020
23 avril 2012 à 15:52
Il semble qu'il y ait des problèmes avec les byte négatifs... Tu peux alors faire comme ça :

System.out.print(Integer.toString(b<0 ? 255+b : b,2));
Mais je pense que ça fais à peu près ce que tu voulais, non ?
0
oui, et merci pour votre patience....
0