views:

80

answers:

2

My services file (C:\WINDOWS\system32\drivers\etc\services) has a bunch of Port to Service mappings:

echo                7/tcp
echo                7/udp
discard             9/tcp    sink null
discard             9/udp    sink null
systat             11/tcp    users                  #Active users
systat             11/udp    users                  #Active users
daytime            13/tcp
daytime            13/udp
qotd               17/tcp    quote                  #Quote of the day
qotd               17/udp    quote                  #Quote of the day
chargen            19/tcp    ttytst source          #Character generator

I am trying to find a way to convert from a Port to the Service Name programmatically through Java APIs (instead of parsing) or third party libraries?

Pseudocode:

Port port = new Port("443","tcp");
String service = port.getService();
System.out.println(service);  //prints "https"

Is there any good way to accomplish this?

A: 

I don't think there is some API in java for this purpose. You will either need to parse this file or maintain port service mapping in some form (Properties file,db etc.). example to parse from system file is :

http://www.javafaq.nu/java-example-code-162.html

YoK
I think the request was for a solution that did not involve parsing the /etc/services file
Dean Povey
+1  A: 

What you are looking for is a Java implementation of the Linux getservbyport() system call. Take a look at http://github.com/wmeissner/jnr-netdb. Also, do a Google search for java getservbyport

Jim Garrison
It tries to use the native functions if possible, falling back to parsing/etc/services directly, and finally to an inbuilt table for use in environmentswhere neither native code, nor filesystem access is possible.
YoK