2010-08-03 34 views
6

My tập tin dịch vụ (C: \ WINDOWS \ system32 \ drivers \ etc \ dịch vụ) có một loạt các cổng để ánh xạ dịch vụ:Port to Service Name in Java?

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 

Tôi cố gắng để tìm thấy một cách để chuyển đổi từ một cảng với Dịch vụ Đặt tên theo chương trình thông qua các API Java (thay vì phân tích cú pháp) hoặc thư viện của bên thứ ba?

Mã giả:

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

Có cách nào tốt để thực hiện điều này?

+0

+1 cho nhiệm vụ có cấu trúc tốt –

Trả lời

2

gì bạn đang tìm kiếm là một thực hiện Java của cuộc gọi hệ thống Linux getservbyport(). Hãy xem http://github.com/wmeissner/jnr-netdb. Ngoài ra, thực hiện tìm kiếm trên Google cho java getservbyport

+0

Nó cố gắng sử dụng các hàm gốc nếu có thể quay lại phân tích cú pháp trực tiếp /etc/services và cuối cùng là bảng sẵn có để sử dụng trong môi trường nơi không thể truy cập mã gốc, cũng như không thể truy cập hệ thống tệp. – YoK

0

Tôi không nghĩ có một số API trong java cho mục đích này. Bạn sẽ cần phải phân tích cú pháp tệp này hoặc duy trì ánh xạ dịch vụ cổng ở dạng nào đó (tệp thuộc tính, db, v.v.). ví dụ để phân tích từ tập tin hệ thống là:

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

+0

Tôi nghĩ rằng yêu cầu là giải pháp không liên quan đến việc phân tích cú pháp/etc/services file –