sto cercando di leggere una serie di informazioni che mi arrivano in broadcasting sulla porta 1002 in udp ma avendo letto e creato un piccolo programma che legge il traffico UDP ho scoperto una cosa che non mi so spiegare.
codice mio programma
codice:
import java.net.DatagramPacket;
import java.net.DatagramSocket;
public class UDPReceive {
public static void main(String args[]) {
try {
int port = 1002;
DatagramSocket socket = new DatagramSocket(port);
//InetAddress server = InetAddress.getByName("10.0.0.251");
byte[] buffer = new byte[4096];
DatagramPacket packet = new DatagramPacket(buffer, buffer.length);
while (true) {
socket.receive(packet);
String msg = new String(buffer, 0, packet.getLength());
System.out.println(packet.getAddress().getHostName());
//System.out.println(" ");
//System.out.println(msg);
System.out.println(" ");
System.out.println(stringToHex(msg));
stringHex(buffer,packet.getLength());
packet.setLength(buffer.length);
}
} catch (Exception e) {
System.err.println(e);
}
}
public static String stringToHex(String base)
{
StringBuffer buffer = new StringBuffer();
int intValue;
for(int x = 0; x < base.length(); x++)
{
int cursor = 0;
intValue = base.charAt(x);
String binaryChar = new String(Integer.toBinaryString(base.charAt(x)));
for(int i = 0; i < binaryChar.length(); i++)
{
if(binaryChar.charAt(i) == '1')
{
cursor += 1;
}
}
if((cursor % 2) > 0)
{
intValue += 128;
}
if (intValue > 15) {
buffer.append(Integer.toHexString(intValue)+".");
} else {
buffer.append("0"+Integer.toHexString(intValue)+".");
}
}
return buffer.toString();
}
public static Void stringHex(byte[] base, int leng) {
StringBuffer buffer = new StringBuffer();
for (int x = 0; x < leng; x++) {
buffer.append(base[x] + ".");
}
System.out.println(buffer.toString());
return null;
}
}
la lettura che mi rende questo programmino in alcuni punti risulta errata:
00.0c.c6.f6.a9.d8.00.00.1d3.82.00.00.30.39.3a.35.3 6.3a.b2.39.00.00.
ma invece da uno sniffer vedo i dati reali:
00.0c.c6.76.29.58.08.00.45.00.02.54.bf.9f.00.b9.40 .11.a2.47.0a.00.00.fb.0a.00
ora non mi so spiegare perché vedo informazioni a oltre 8 bit es ( 1d3 ) che poi mi degradano tutto il parchetto.
quale potrebbe essere il problema ?