Welcome to the Java Programming Forums

The professional, friendly Java community. 21,500 members and growing!

The Java Programming Forums are a community of Java programmers from all around the World. Our members have a wide range of skills and they all have one thing in common: A passion to learn and code Java. We invite beginner Java programmers right through to Java professionals to post here and share your knowledge. Become a part of the community, help others, expand your knowledge of Java and enjoy talking with like minded people. Registration is quick and best of all free. We look forward to meeting you.

>> REGISTER NOW TO START POSTING

# Thread: Converting Hex values to IP and Port Number - IP format

1. ## Converting Hex values to IP and Port Number - IP format

Could use some help,

I working on decoding some data from a UDP server. In the response I get a list of IP addresses and Port numbers as a byte array. I then converted them to hex strings.

I'm confused about the format of some of the IP address once I convert them to decimal. Some of them don't seem to follow the normal IP format of xxx.xx.xxx.xx .

Here is the code:
```public void addPeer(String addressin, String portin){
String port = portin;

System.out.println("Port Hex: " + port);
long B = Long.parseLong(port, 16);
System.out.println("IP Decimal: " + A);
System.out.println("Port Decimal: " + B);

}```

...and the Output:

```IP Hex: 7e7548f3
Port Hex: 969f
IP Decimal: 2121615603
Port Decimal: 38559

IP Hex: 6b4da427
Port Hex: 2a97
IP Decimal: 1800250407
Port Decimal: 10903

IP Hex: d995a68b
Port Hex: d564
IP Decimal: 3650463371
Port Decimal: 54628

IP Hex: 0539728e
Port Hex: 5b39
IP Decimal: 87650958
Port Decimal: 23353```

So the 4th one down as Decimal is "87650958"... I'm confused as to what format this is and IP lookup says its not a valid IP.

I don't how that would fit in the format xxx.xx.xxx.xx

Am I converting them wrong or am I just getting junk values from the server?

2. ## Re: Converting Hex values to IP and Port Number - IP format

Where are you getting the values in the Strings: addressin and portin?

Is there any documentation that describes what data you are receiving?

3. ## Re: Converting Hex values to IP and Port Number - IP format

I have double checked the data from the UDP reply and it seems to be fine.

Here is the code anyway.

The reply Byte Array goes through a Display method that converts it into a hex string. Then to the passpeer method that pulls out the IP address and Port number and checks for trailing zeros.

```passPeers(display(bytereceived));

public static String display(byte[] b1) {
StringBuilder strBuilder = new StringBuilder();
for(byte val : b1) {
strBuilder.append(String.format("%02x", val&0xff));
}
return strBuilder.toString();
}

String hold;
String trim = "";
int index = 0;
boolean flip = true;
String port = "";

if (hold.charAt(index) == '0' && hold.charAt(index + 1) == '0') flip = false;
while (flip){
trim = hold.substring(index, index + 12);
port = trim.substring(8, 12);
index = index + 12;
if (hold.charAt(index) == '0' && hold.charAt(index + 1) == '0') flip = false;
}
}```

Bellow is the raw data in the bytereceived array...
`00000001000000020000068900000000000000195e6eae8beb7f5bb471e42d925bb42fb1b23a54ec236d56c454541f5175e75450f402aa5b512c9c58f38c4f4e905900001fb791956f610539728e5b39027a659f2327c2b11c8b44cabe66468a349db9f204746acdb9955a26c74ba078b9f2e475a0780551000000000000000000000...`

Here is a link to the protocol https://www.libtorrent.org/udp_tracker_protocol.html. The above is an announcing reply packet.

The peer list of IP and Port number starts at char(40).

I have this as the output
```IP Hex: 5e6eae8b
Port Hex: eb7f
IP Decimal: 1584311947
Port Decimal: 60287
IP Hex: 5bb471e4
Port Hex: 2d92
IP Decimal: 1538552292
Port Decimal: 11666
IP Hex: 5bb42fb1
Port Hex: b23a
IP Decimal: 1538535345
Port Decimal: 45626
IP Hex: 54ec236d
Port Hex: 56c4
IP Decimal: 1424761709
Port Decimal: 22212
IP Hex: 54541f51
Port Hex: 75e7
IP Decimal: 1414799185
Port Decimal: 30183
IP Hex: 5450f402
Port Hex: aa5b
IP Decimal: 1414591490
Port Decimal: 43611
IP Hex: 512c9c58
Port Hex: f38c
IP Decimal: 1361878104
Port Decimal: 62348
IP Hex: 4f4e9059
Port Hex: 0000
IP Decimal: 1330548825
Port Decimal: 0
IP Hex: 1fb79195
Port Hex: 6f61
IP Decimal: 532124053
Port Decimal: 28513
IP Hex: 0539728e
Port Hex: 5b39
IP Decimal: 87650958
Port Decimal: 23353
IP Hex: 027a659f
Port Hex: 2327
IP Decimal: 41575839
Port Decimal: 8999
IP Hex: c2b11c8b
Port Hex: 44ca
IP Decimal: 3266387083
Port Decimal: 17610
IP Hex: be66468a
Port Hex: 349d
IP Decimal: 3194373770
Port Decimal: 13469
IP Hex: b9f20474
Port Hex: 6acd
IP Decimal: 3119645812
Port Decimal: 27341
IP Hex: b9955a26
Port Hex: c74b
IP Decimal: 3113572902
Port Decimal: 51019
IP Hex: a078b9f2
Port Hex: e475
IP Decimal: 2692266482
Port Decimal: 58485
IP Hex: a0780551
Port Hex: 0000
IP Decimal: 2692220241```

The error is on the 11th one down... "IP Decimal: 87650958"

4. ## Re: Converting Hex values to IP and Port Number - IP format

The error is on the 11th one down... "IP Decimal: 87650958"
What is the error?
If there is an error message can you copy the full text and paste it here?

Have you looked at how to convert a value to a dotted IP address? There should be 4 bytes of data.
Take the bytes one by one and convert them to decimal values, insert a . between each two numbers to get the xxx.xxx.xxx.xxx format
See: https://superuser.com/questions/1104...ddress/1104236

Should 5e6eae8b convert to 94.110.174.139?

5. ## Re: Converting Hex values to IP and Port Number - IP format

Thanks that was it...

What about the port number. Its two bytes long. Would I just convert the two bytes together or bit by bit like the IP?

6. ## Re: Converting Hex values to IP and Port Number - IP format

about the port number. Its two bytes long. Would I just convert the two bytes together
I would guess it should be treated as a number.