├── .classpath ├── .github └── workflows │ └── ci.yml ├── .gitignore ├── .project ├── .settings ├── org.eclipse.jdt.core.prefs ├── org.eclipse.jdt.ui.prefs └── org.maven.ide.eclipse.prefs ├── .travis.yml ├── LICENSE ├── README ├── lib ├── CopyLibs │ └── org-netbeans-modules-java-j2seproject-copylibstask.jar ├── junit │ ├── junit-3.8.2-api.zip │ └── junit-3.8.2.jar ├── junit_4 │ ├── junit-4.5-api.zip │ ├── junit-4.5-src.jar │ └── junit-4.5.jar └── nblibraries.properties ├── pom.xml └── src ├── main └── java │ └── jnr │ └── netdb │ ├── FileProtocolsDB.java │ ├── FileServicesDB.java │ ├── IANAProtocolsDB.java │ ├── IANAServicesDB.java │ ├── NativeProtocolsDB.java │ ├── NativeServicesDB.java │ ├── NetDBEntry.java │ ├── NetDBFilter.java │ ├── NetDBIterator.java │ ├── NetDBParser.java │ ├── Protocol.java │ ├── ProtocolsDB.java │ ├── Service.java │ ├── ServicesDB.java │ └── StringUtil.java └── test └── java └── jnr └── netdb ├── FileProtocolDBTest.java ├── FileServicesDBTest.java ├── NativeProtocolsDBTest.java ├── NativeServicesDBTest.java ├── ProtocolTest.java └── ServiceTest.java /.classpath: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /.github/workflows/ci.yml: -------------------------------------------------------------------------------- 1 | # This workflow will build a Java project with Maven 2 | # For more information see: https://help.github.com/actions/language-and-framework-guides/building-and-testing-java-with-maven 3 | 4 | name: Java CI with Maven 5 | 6 | on: 7 | push: 8 | branches: [ master ] 9 | pull_request: 10 | branches: [ master ] 11 | 12 | jobs: 13 | jdk8: 14 | 15 | runs-on: ubuntu-latest 16 | 17 | steps: 18 | - uses: actions/checkout@v2 19 | - name: Set up JDK 8 20 | uses: actions/setup-java@v1.4.3 21 | with: 22 | java-version: 8 23 | - name: Build with Maven 24 | run: mvn -B package --file pom.xml 25 | 26 | jdk11: 27 | 28 | runs-on: ubuntu-latest 29 | 30 | steps: 31 | - uses: actions/checkout@v2 32 | - name: Set up JDK 11 33 | uses: actions/setup-java@v1.4.3 34 | with: 35 | java-version: 11 36 | - name: Build with Maven 37 | run: mvn -B package --file pom.xml 38 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | *.orig$ 2 | *.rej$ 3 | *.class$ 4 | *~ 5 | .idea 6 | *.iml 7 | nbproject/private 8 | build 9 | dist 10 | target 11 | lib/nblibraries-private.properties 12 | /.settings/ 13 | 14 | -------------------------------------------------------------------------------- /.project: -------------------------------------------------------------------------------- 1 | 2 | 3 | jnr-netdb 4 | 5 | 6 | 7 | 8 | 9 | org.eclipse.jdt.core.javabuilder 10 | 11 | 12 | 13 | 14 | org.maven.ide.eclipse.maven2Builder 15 | 16 | 17 | 18 | 19 | 20 | org.maven.ide.eclipse.maven2Nature 21 | org.eclipse.jdt.core.javanature 22 | 23 | 24 | -------------------------------------------------------------------------------- /.settings/org.eclipse.jdt.core.prefs: -------------------------------------------------------------------------------- 1 | #Thu Mar 25 07:53:14 CET 2010 2 | eclipse.preferences.version=1 3 | org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5 4 | org.eclipse.jdt.core.compiler.compliance=1.5 5 | org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning 6 | org.eclipse.jdt.core.compiler.source=1.5 7 | -------------------------------------------------------------------------------- /.settings/org.eclipse.jdt.ui.prefs: -------------------------------------------------------------------------------- 1 | #Thu Mar 25 08:36:35 CET 2010 2 | eclipse.preferences.version=1 3 | editor_save_participant_org.eclipse.jdt.ui.postsavelistener.cleanup=true 4 | sp_cleanup.add_default_serial_version_id=true 5 | sp_cleanup.add_generated_serial_version_id=false 6 | sp_cleanup.add_missing_annotations=true 7 | sp_cleanup.add_missing_deprecated_annotations=true 8 | sp_cleanup.add_missing_methods=false 9 | sp_cleanup.add_missing_nls_tags=false 10 | sp_cleanup.add_missing_override_annotations=true 11 | sp_cleanup.add_serial_version_id=false 12 | sp_cleanup.always_use_blocks=true 13 | sp_cleanup.always_use_parentheses_in_expressions=false 14 | sp_cleanup.always_use_this_for_non_static_field_access=false 15 | sp_cleanup.always_use_this_for_non_static_method_access=false 16 | sp_cleanup.convert_to_enhanced_for_loop=false 17 | sp_cleanup.correct_indentation=false 18 | sp_cleanup.format_source_code=false 19 | sp_cleanup.format_source_code_changes_only=true 20 | sp_cleanup.make_local_variable_final=false 21 | sp_cleanup.make_parameters_final=false 22 | sp_cleanup.make_private_fields_final=true 23 | sp_cleanup.make_type_abstract_if_missing_method=false 24 | sp_cleanup.make_variable_declarations_final=false 25 | sp_cleanup.never_use_blocks=false 26 | sp_cleanup.never_use_parentheses_in_expressions=true 27 | sp_cleanup.on_save_use_additional_actions=true 28 | sp_cleanup.organize_imports=false 29 | sp_cleanup.qualify_static_field_accesses_with_declaring_class=false 30 | sp_cleanup.qualify_static_member_accesses_through_instances_with_declaring_class=true 31 | sp_cleanup.qualify_static_member_accesses_through_subtypes_with_declaring_class=true 32 | sp_cleanup.qualify_static_member_accesses_with_declaring_class=false 33 | sp_cleanup.qualify_static_method_accesses_with_declaring_class=false 34 | sp_cleanup.remove_private_constructors=true 35 | sp_cleanup.remove_trailing_whitespaces=false 36 | sp_cleanup.remove_trailing_whitespaces_all=false 37 | sp_cleanup.remove_trailing_whitespaces_ignore_empty=true 38 | sp_cleanup.remove_unnecessary_casts=true 39 | sp_cleanup.remove_unnecessary_nls_tags=true 40 | sp_cleanup.remove_unused_imports=true 41 | sp_cleanup.remove_unused_local_variables=false 42 | sp_cleanup.remove_unused_private_fields=true 43 | sp_cleanup.remove_unused_private_members=false 44 | sp_cleanup.remove_unused_private_methods=true 45 | sp_cleanup.remove_unused_private_types=true 46 | sp_cleanup.sort_members=false 47 | sp_cleanup.sort_members_all=false 48 | sp_cleanup.use_blocks=false 49 | sp_cleanup.use_blocks_only_for_return_and_throw=false 50 | sp_cleanup.use_parentheses_in_expressions=false 51 | sp_cleanup.use_this_for_non_static_field_access=false 52 | sp_cleanup.use_this_for_non_static_field_access_only_if_necessary=true 53 | sp_cleanup.use_this_for_non_static_method_access=false 54 | sp_cleanup.use_this_for_non_static_method_access_only_if_necessary=true 55 | -------------------------------------------------------------------------------- /.settings/org.maven.ide.eclipse.prefs: -------------------------------------------------------------------------------- 1 | #Thu Mar 25 07:53:07 CET 2010 2 | activeProfiles= 3 | eclipse.preferences.version=1 4 | fullBuildGoals=process-test-resources 5 | includeModules=false 6 | resolveWorkspaceProjects=true 7 | resourceFilterGoals=process-resources resources\:testResources 8 | skipCompilerPlugin=true 9 | version=1 10 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | language: java 2 | jdk: 3 | - oraclejdk7 4 | - openjdk6 5 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | 2 | Licensed under the Apache License, Version 2.0 (the "License"); 3 | you may not use this file except in compliance with the License. 4 | You may obtain a copy of the License at 5 | 6 | http://www.apache.org/licenses/LICENSE-2.0 7 | 8 | Unless required by applicable law or agreed to in writing, software 9 | distributed under the License is distributed on an "AS IS" BASIS, 10 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 11 | See the License for the specific language governing permissions and 12 | limitations under the License. -------------------------------------------------------------------------------- /README: -------------------------------------------------------------------------------- 1 | 2 | jnr-netdb is a java interface to getservbyname(3), getservbyport(3). 3 | 4 | It tries to use the native functions if possible, falling back to parsing 5 | /etc/services directly, and finally to an inbuilt table for use in environments 6 | where neither native code, nor filesystem access is possible. 7 | 8 | -------------------------------------------------------------------------------- /lib/CopyLibs/org-netbeans-modules-java-j2seproject-copylibstask.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jnr/jnr-netdb/32d2676c846cb32ec4beffa85a540a616f08f18a/lib/CopyLibs/org-netbeans-modules-java-j2seproject-copylibstask.jar -------------------------------------------------------------------------------- /lib/junit/junit-3.8.2-api.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jnr/jnr-netdb/32d2676c846cb32ec4beffa85a540a616f08f18a/lib/junit/junit-3.8.2-api.zip -------------------------------------------------------------------------------- /lib/junit/junit-3.8.2.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jnr/jnr-netdb/32d2676c846cb32ec4beffa85a540a616f08f18a/lib/junit/junit-3.8.2.jar -------------------------------------------------------------------------------- /lib/junit_4/junit-4.5-api.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jnr/jnr-netdb/32d2676c846cb32ec4beffa85a540a616f08f18a/lib/junit_4/junit-4.5-api.zip -------------------------------------------------------------------------------- /lib/junit_4/junit-4.5-src.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jnr/jnr-netdb/32d2676c846cb32ec4beffa85a540a616f08f18a/lib/junit_4/junit-4.5-src.jar -------------------------------------------------------------------------------- /lib/junit_4/junit-4.5.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jnr/jnr-netdb/32d2676c846cb32ec4beffa85a540a616f08f18a/lib/junit_4/junit-4.5.jar -------------------------------------------------------------------------------- /lib/nblibraries.properties: -------------------------------------------------------------------------------- 1 | libs.CopyLibs.classpath=\ 2 | ${base}/CopyLibs/org-netbeans-modules-java-j2seproject-copylibstask.jar 3 | libs.junit.classpath=\ 4 | ${base}/junit/junit-3.8.2.jar 5 | libs.junit.javadoc=\ 6 | ${base}/junit/junit-3.8.2-api.zip 7 | libs.junit_4.classpath=\ 8 | ${base}/junit_4/junit-4.5.jar 9 | libs.junit_4.javadoc=\ 10 | ${base}/junit_4/junit-4.5-api.zip 11 | libs.junit_4.src=\ 12 | ${base}/junit_4/junit-4.5-src.jar 13 | -------------------------------------------------------------------------------- /pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 4.0.0 3 | 4 | org.sonatype.oss 5 | oss-parent 6 | 7 7 | 8 | 9 | com.github.jnr 10 | jnr-netdb 11 | jar 12 | 1.2.1-SNAPSHOT 13 | jnr-netdb 14 | Lookup TCP and UDP services from java 15 | http://github.com/jnr/jnr-netdb 16 | 17 | 18 | 19 | The Apache Software License, Version 2.0 20 | http://www.apache.org/licenses/LICENSE-2.0.txt 21 | repo 22 | 23 | 24 | 25 | 26 | scm:git:git@github.com:jnr/jnr-netdb.git 27 | scm:git:git@github.com:jnr/jnr-netdb.git 28 | git@github.com:jnr/jnr-netdb.git 29 | 30 | 31 | 32 | 33 | wmeissner 34 | Wayne Meissner 35 | wmeissner@gmail.com 36 | 37 | 38 | 39 | 40 | UTF-8 41 | 8 42 | 8 43 | 44 | 45 | 46 | 47 | 48 | junit 49 | junit 50 | 4.13.1 51 | test 52 | 53 | 54 | 55 | com.github.jnr 56 | jnr-ffi 57 | 2.2.0 58 | compile 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | org.apache.maven.plugins 67 | maven-jar-plugin 68 | 2.3.1 69 | 70 | 71 | 72 | org.jnrproject.netdb 73 | 74 | 75 | 76 | 77 | 78 | org.apache.maven.plugins 79 | maven-compiler-plugin 80 | 3.8.1 81 | 82 | 83 | 84 | 85 | 86 | 87 | java9 88 | 89 | 90 | 91 | org.apache.maven.plugins 92 | maven-compiler-plugin 93 | 94 | 95 | ${maven.compiler.target} 96 | 97 | 98 | 99 | 100 | 101 | [9,) 102 | 103 | 104 | 105 | 106 | 107 | -------------------------------------------------------------------------------- /src/main/java/jnr/netdb/FileProtocolsDB.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2010 Wayne Meissner 3 | * 4 | * This file is part of jnr. 5 | * 6 | * Licensed under the Apache License, Version 2.0 (the "License"); 7 | * you may not use this file except in compliance with the License. 8 | * You may obtain a copy of the License at 9 | * 10 | * http://www.apache.org/licenses/LICENSE-2.0 11 | * 12 | * Unless required by applicable law or agreed to in writing, software 13 | * distributed under the License is distributed on an "AS IS" BASIS, 14 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 15 | * See the License for the specific language governing permissions and 16 | * limitations under the License. 17 | */ 18 | 19 | package jnr.netdb; 20 | 21 | import java.io.File; 22 | import java.io.FileNotFoundException; 23 | import java.io.FileReader; 24 | import java.io.IOException; 25 | import java.io.StringReader; 26 | import java.util.Collection; 27 | import java.util.Collections; 28 | import java.util.LinkedList; 29 | import java.util.List; 30 | 31 | import jnr.ffi.Platform; 32 | 33 | import static jnr.ffi.Platform.OS.WINDOWS; 34 | 35 | /** 36 | * 37 | */ 38 | class FileProtocolsDB implements ProtocolsDB { 39 | private final File protocolsFile; 40 | 41 | public static final FileProtocolsDB getInstance() { 42 | return SingletonHolder.INSTANCE; 43 | } 44 | 45 | private static final class SingletonHolder { 46 | public static final FileProtocolsDB INSTANCE = load(); 47 | } 48 | 49 | FileProtocolsDB(File protocolsFile) { 50 | this.protocolsFile = protocolsFile; 51 | } 52 | 53 | private static final File locateProtocolsFile() { 54 | if (Platform.getNativePlatform().getOS().equals(WINDOWS)) { 55 | String systemRoot; 56 | try { 57 | // FIXME: %SystemRoot% is typically *not* present in Java env, 58 | // so we need a better way to obtain the Windows location. 59 | // One possible solution: Win32API's SHGetFolderPath() with 60 | // parameter CSIDL_SYSTEM or CSIDL_WINDOWS. 61 | systemRoot = System.getProperty("SystemRoot", "C:\\windows"); 62 | } catch (SecurityException se) { 63 | // whoops, try the most logical one 64 | systemRoot = "C:\\windows"; 65 | } 66 | 67 | return new File(systemRoot + "\\system32\\drivers\\etc\\protocol"); 68 | 69 | } else { 70 | return new File("/etc/protocols"); 71 | } 72 | } 73 | 74 | private static FileProtocolsDB load() { 75 | try { 76 | File protocolsFile = locateProtocolsFile(); 77 | // Fail unless /etc/protocols can be read and contains at least one valid entry 78 | NetDBParser parser = new NetDBParser(new FileReader(protocolsFile)); 79 | try { 80 | parser.iterator().next(); 81 | } finally { 82 | parser.close(); 83 | } 84 | 85 | return new FileProtocolsDB(protocolsFile); 86 | 87 | } catch (Throwable t) { 88 | return null; 89 | } 90 | } 91 | 92 | public Protocol getProtocolByName(final String name) { 93 | 94 | return parse(new Filter() { 95 | 96 | public boolean filter(Protocol p) { 97 | if (p.getName().equals(name)) { 98 | return true; 99 | } 100 | 101 | for (String alias : p.getAliases()) { 102 | if (alias.equals(name)) { 103 | return true; 104 | } 105 | } 106 | 107 | return false; 108 | } 109 | }); 110 | } 111 | 112 | public Protocol getProtocolByNumber(final Integer proto) { 113 | return parse(new Filter() { 114 | 115 | public boolean filter(Protocol p) { 116 | return p.getProto() == proto.intValue(); 117 | } 118 | }); 119 | } 120 | 121 | public Collection getAllProtocols() { 122 | 123 | final List allProtocols = new LinkedList(); 124 | 125 | parse(new Filter() { 126 | 127 | public boolean filter(Protocol s) { 128 | allProtocols.add(s); 129 | return false; 130 | } 131 | }); 132 | 133 | return Collections.unmodifiableList(allProtocols); 134 | } 135 | 136 | private final NetDBParser loadProtocolsFile() { 137 | try { 138 | return new NetDBParser(new FileReader(protocolsFile)); 139 | } catch (FileNotFoundException ex) { 140 | return new NetDBParser(new StringReader("")); 141 | } 142 | } 143 | 144 | private static interface Filter { 145 | boolean filter(Protocol s); 146 | } 147 | 148 | private final Protocol parse(Filter filter) { 149 | NetDBParser parser = loadProtocolsFile(); 150 | 151 | try { 152 | for (NetDBEntry e : parser) { 153 | try { 154 | Protocol p = new Protocol(e.name, Integer.parseInt(e.data, 10), e.aliases); 155 | if (filter.filter(p)) { 156 | return p; 157 | } 158 | } catch (NumberFormatException ex) {} 159 | } 160 | 161 | } finally { 162 | try { 163 | parser.close(); 164 | } catch (IOException ex) { 165 | throw new RuntimeException(ex); 166 | } 167 | } 168 | 169 | return null; 170 | } 171 | } 172 | -------------------------------------------------------------------------------- /src/main/java/jnr/netdb/FileServicesDB.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2010 Wayne Meissner 3 | * 4 | * This file is part of jnr. 5 | * 6 | * Licensed under the Apache License, Version 2.0 (the "License"); 7 | * you may not use this file except in compliance with the License. 8 | * You may obtain a copy of the License at 9 | * 10 | * http://www.apache.org/licenses/LICENSE-2.0 11 | * 12 | * Unless required by applicable law or agreed to in writing, software 13 | * distributed under the License is distributed on an "AS IS" BASIS, 14 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 15 | * See the License for the specific language governing permissions and 16 | * limitations under the License. 17 | */ 18 | 19 | package jnr.netdb; 20 | 21 | import java.io.File; 22 | import java.io.FileNotFoundException; 23 | import java.io.FileReader; 24 | import java.io.IOException; 25 | import java.io.StringReader; 26 | import java.util.Collection; 27 | import java.util.Collections; 28 | import java.util.LinkedList; 29 | import java.util.List; 30 | 31 | /** 32 | * Parses /etc/services 33 | */ 34 | final class FileServicesDB implements ServicesDB { 35 | public static String fileName = "/etc/services"; 36 | 37 | public static final ServicesDB getInstance() { 38 | return SingletonHolder.INSTANCE; 39 | } 40 | 41 | private static final class SingletonHolder { 42 | public static final ServicesDB INSTANCE = load(); 43 | } 44 | 45 | private static final ServicesDB load() { 46 | try { 47 | // Fail unless /etc/services can be read and contains at least one valid entry 48 | NetDBParser parser = parseServicesFile(); 49 | try { 50 | parser.iterator().next(); 51 | } finally { 52 | parser.close(); 53 | } 54 | 55 | return new FileServicesDB(); 56 | 57 | } catch (Throwable t) { 58 | return null; 59 | } 60 | } 61 | 62 | static final NetDBParser parseServicesFile() { 63 | try { 64 | return new NetDBParser(new FileReader(new File(fileName))); 65 | } catch (FileNotFoundException ex) { 66 | return new NetDBParser(new StringReader("")); 67 | } 68 | } 69 | 70 | private static final Service parseServicesEntry(NetDBEntry e) { 71 | 72 | String[] portproto = e.data.split("/"); 73 | if (portproto.length < 2) { 74 | return null; 75 | } 76 | 77 | int port; 78 | try { 79 | port = Integer.parseInt(portproto[0], 10); 80 | } catch (NumberFormatException ex) { 81 | return null; 82 | } 83 | 84 | return new Service(e.name, port, portproto[1], e.aliases); 85 | } 86 | 87 | private static interface Filter { 88 | boolean filter(Service s); 89 | } 90 | 91 | private final Service parse(Filter filter) { 92 | NetDBParser parser = parseServicesFile(); 93 | 94 | try { 95 | for (NetDBEntry e : parser) { 96 | Service s = parseServicesEntry(e); 97 | if (s != null && filter.filter(s)) { 98 | return s; 99 | } 100 | } 101 | 102 | } finally { 103 | try { 104 | parser.close(); 105 | } catch (IOException ex) { 106 | throw new RuntimeException(ex); 107 | } 108 | } 109 | 110 | return null; 111 | } 112 | 113 | public Service getServiceByName(final String name, final String proto) { 114 | return parse(new Filter() { 115 | 116 | public boolean filter(Service s) { 117 | if (!s.proto.equals(proto) && proto != null) { 118 | return false; 119 | } 120 | 121 | if (s.getName().equals(name)) { 122 | return true; 123 | } 124 | 125 | for (String alias : s.getAliases()) { 126 | if (alias.equals(name)) { 127 | return true; 128 | } 129 | } 130 | 131 | return false; 132 | } 133 | }); 134 | } 135 | 136 | public Service getServiceByPort(final Integer port, final String proto) { 137 | return parse(new Filter() { 138 | 139 | public boolean filter(Service s) { 140 | return s.getPort() == port.intValue() && (s.proto.equals(proto) || proto == null); 141 | } 142 | }); 143 | } 144 | 145 | public Collection getAllServices() { 146 | 147 | final List allServices = new LinkedList(); 148 | 149 | parse(new Filter() { 150 | 151 | public boolean filter(Service s) { 152 | allServices.add(s); 153 | return false; 154 | } 155 | }); 156 | 157 | return Collections.unmodifiableList(allServices); 158 | } 159 | } 160 | -------------------------------------------------------------------------------- /src/main/java/jnr/netdb/IANAProtocolsDB.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2010 Wayne Meissner 3 | * 4 | * This file is part of jnr. 5 | * 6 | * Licensed under the Apache License, Version 2.0 (the "License"); 7 | * you may not use this file except in compliance with the License. 8 | * You may obtain a copy of the License at 9 | * 10 | * http://www.apache.org/licenses/LICENSE-2.0 11 | * 12 | * Unless required by applicable law or agreed to in writing, software 13 | * distributed under the License is distributed on an "AS IS" BASIS, 14 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 15 | * See the License for the specific language governing permissions and 16 | * limitations under the License. 17 | */ 18 | 19 | package jnr.netdb; 20 | 21 | import java.util.ArrayList; 22 | import java.util.Arrays; 23 | import java.util.Collection; 24 | import java.util.Collections; 25 | import java.util.HashMap; 26 | import java.util.List; 27 | import java.util.Map; 28 | 29 | /** 30 | * Pre-compiled table of IANA protocol numbers 31 | */ 32 | class IANAProtocolsDB implements ProtocolsDB { 33 | 34 | private final Map nameToProto; 35 | private final Map numberToProto; 36 | 37 | public static final IANAProtocolsDB getInstance() { 38 | return SingletonHolder.INSTANCE; 39 | } 40 | 41 | private static final class SingletonHolder { 42 | public static final IANAProtocolsDB INSTANCE = initProtocolDB().build(); 43 | } 44 | 45 | private IANAProtocolsDB(Map nameToProto, Map numberToProto) { 46 | this.nameToProto = nameToProto; 47 | this.numberToProto = numberToProto; 48 | } 49 | 50 | public Protocol getProtocolByName(String name) { 51 | return nameToProto.get(name); 52 | } 53 | 54 | public Protocol getProtocolByNumber(Integer number) { 55 | return numberToProto.get(number); 56 | } 57 | 58 | public Collection getAllProtocols() { 59 | return Collections.unmodifiableCollection(nameToProto.values()); 60 | } 61 | 62 | private static final class ProtocolDBBuilder { 63 | private static final List emptyAliases = Collections.emptyList(); 64 | private final Map nameToProto = new HashMap(); 65 | private final Map numberToProto = new HashMap(); 66 | 67 | public void add(String name, int proto, String... aliases) { 68 | List aliasesList = aliases.length > 0 ? new ArrayList(Arrays.asList(aliases)) : emptyAliases; 69 | 70 | Protocol p = new Protocol(name, proto, aliasesList); 71 | nameToProto.put(name, p); 72 | for (String alias : aliases) { 73 | nameToProto.put(alias, p); 74 | } 75 | 76 | numberToProto.put(proto, p); 77 | } 78 | 79 | public IANAProtocolsDB build() { 80 | return new IANAProtocolsDB(nameToProto, numberToProto); 81 | } 82 | } 83 | 84 | private static final ProtocolDBBuilder initProtocolDB() { 85 | ProtocolDBBuilder builder = new ProtocolDBBuilder(); 86 | 87 | builder.add("ip", 0, "IP"); 88 | builder.add("icmp", 1, "ICMP"); 89 | builder.add("igmp", 2, "IGMP"); 90 | builder.add("ggp", 3, "GGP"); 91 | builder.add("ipencap", 4, "IP-ENCAP"); 92 | builder.add("st2", 5, "ST2"); 93 | builder.add("tcp", 6, "TCP"); 94 | builder.add("cbt", 7, "CBT"); 95 | builder.add("egp", 8, "EGP"); 96 | builder.add("igp", 9, "IGP"); 97 | builder.add("bbn-rcc", 10, "BBN-RCC-MON"); 98 | builder.add("nvp", 11, "NVP-II"); 99 | builder.add("pup", 12, "PUP"); 100 | builder.add("argus", 13, "ARGUS"); 101 | builder.add("emcon", 14, "EMCON"); 102 | builder.add("xnet", 15, "XNET"); 103 | builder.add("chaos", 16, "CHAOS"); 104 | builder.add("udp", 17, "UDP"); 105 | builder.add("mux", 18, "MUX"); 106 | builder.add("dcn", 19, "DCN-MEAS"); 107 | builder.add("hmp", 20, "HMP"); 108 | builder.add("prm", 21, "PRM"); 109 | builder.add("xns-idp", 22, "XNS-IDP"); 110 | builder.add("trunk-1", 23, "TRUNK-1"); 111 | builder.add("trunk-2", 24, "TRUNK-2"); 112 | builder.add("leaf-1", 25, "LEAF-1"); 113 | builder.add("leaf-2", 26, "LEAF-2"); 114 | builder.add("rdp", 27, "RDP"); 115 | builder.add("irtp", 28, "IRTP"); 116 | builder.add("iso-tp4", 29, "ISO-TP4"); 117 | builder.add("netblt", 30, "NETBLT"); 118 | builder.add("mfe-nsp", 31, "MFE-NSP"); 119 | builder.add("merit-inp", 32, "MERIT-INP"); 120 | builder.add("sep", 33, "SEP"); 121 | builder.add("3pc", 34, "3PC"); 122 | builder.add("idpr", 35, "IDPR"); 123 | builder.add("xtp", 36, "XTP"); 124 | builder.add("ddp", 37, "DDP"); 125 | builder.add("idpr-cmtp", 38, "IDPR-CMTP"); 126 | builder.add("tp++", 39, "TP++"); 127 | builder.add("il", 40, "IL"); 128 | builder.add("ipv6", 41, "IPV6"); 129 | builder.add("sdrp", 42, "SDRP"); 130 | builder.add("ipv6-route", 43, "IPV6-ROUTE"); 131 | builder.add("ipv6-frag", 44, "IPV6-FRAG"); 132 | builder.add("idrp", 45, "IDRP"); 133 | builder.add("rsvp", 46, "RSVP"); 134 | builder.add("gre", 47, "GRE"); 135 | builder.add("mhrp", 48, "MHRP"); 136 | builder.add("bna", 49, "BNA"); 137 | builder.add("esp", 50, "ESP"); 138 | builder.add("ah", 51, "AH"); 139 | builder.add("i-nlsp", 52, "I-NLSP"); 140 | builder.add("swipe", 53, "SWIPE"); 141 | builder.add("narp", 54, "NARP"); 142 | builder.add("mobile", 55, "MOBILE"); 143 | builder.add("tlsp", 56, "TLSP"); 144 | builder.add("skip", 57, "SKIP"); 145 | builder.add("ipv6-icmp", 58, "IPV6-ICMP"); 146 | builder.add("ipv6-nonxt", 59, "IPV6-NONXT"); 147 | builder.add("ipv6-opts", 60, "IPV6-OPTS"); 148 | builder.add("cftp", 62, "CFTP"); 149 | builder.add("sat-expak", 64, "SAT-EXPAK"); 150 | builder.add("kryptolan", 65, "KRYPTOLAN"); 151 | builder.add("rvd", 66, "RVD"); 152 | builder.add("ippc", 67, "IPPC"); 153 | builder.add("sat-mon", 69, "SAT-MON"); 154 | builder.add("visa", 70, "VISA"); 155 | builder.add("ipcv", 71, "IPCV"); 156 | builder.add("cpnx", 72, "CPNX"); 157 | builder.add("cphb", 73, "CPHB"); 158 | builder.add("wsn", 74, "WSN"); 159 | builder.add("pvp", 75, "PVP"); 160 | builder.add("br-sat-mon", 76, "BR-SAT-MON"); 161 | builder.add("sun-nd", 77, "SUN-ND"); 162 | builder.add("wb-mon", 78, "WB-MON"); 163 | builder.add("wb-expak", 79, "WB-EXPAK"); 164 | builder.add("iso-ip", 80, "ISO-IP"); 165 | builder.add("vmtp", 81, "VMTP"); 166 | builder.add("secure-vmtp", 82, "SECURE-VMTP"); 167 | builder.add("vines", 83, "VINES"); 168 | builder.add("ttp", 84, "TTP"); 169 | builder.add("nsfnet-igp", 85, "NSFNET-IGP"); 170 | builder.add("dgp", 86, "DGP"); 171 | builder.add("tcf", 87, "TCF"); 172 | builder.add("eigrp", 88, "EIGRP"); 173 | builder.add("ospf", 89, "OSPFIGP"); 174 | builder.add("sprite-rpc", 90, "Sprite-RPC"); 175 | builder.add("larp", 91, "LARP"); 176 | builder.add("mtp", 92, "MTP"); 177 | builder.add("ax.25", 93, "AX.25"); 178 | builder.add("ipip", 94, "IPIP"); 179 | builder.add("micp", 95, "MICP"); 180 | builder.add("scc-sp", 96, "SCC-SP"); 181 | builder.add("etherip", 97, "ETHERIP"); 182 | builder.add("encap", 98, "ENCAP"); 183 | builder.add("gmtp", 100, "GMTP"); 184 | builder.add("ifmp", 101, "IFMP"); 185 | builder.add("pnni", 102, "PNNI"); 186 | builder.add("pim", 103, "PIM"); 187 | builder.add("aris", 104, "ARIS"); 188 | builder.add("scps", 105, "SCPS"); 189 | builder.add("qnx", 106, "QNX"); 190 | builder.add("a/n", 107, "A/N"); 191 | builder.add("ipcomp", 108, "IPComp"); 192 | builder.add("snp", 109, "SNP"); 193 | builder.add("compaq-peer", 110, "Compaq-Peer"); 194 | builder.add("ipx-in-ip", 111, "IPX-in-IP"); 195 | builder.add("vrrp", 112, "VRRP"); 196 | builder.add("pgm", 113, "PGM"); 197 | builder.add("l2tp", 115, "L2TP"); 198 | builder.add("ddx", 116, "DDX"); 199 | builder.add("iatp", 117, "IATP"); 200 | builder.add("st", 118, "ST"); 201 | builder.add("srp", 119, "SRP"); 202 | builder.add("uti", 120, "UTI"); 203 | builder.add("smp", 121, "SMP"); 204 | builder.add("sm", 122, "SM"); 205 | builder.add("ptp", 123, "PTP"); 206 | builder.add("isis", 124, "ISIS"); 207 | builder.add("fire", 125, "FIRE"); 208 | builder.add("crtp", 126, "CRTP"); 209 | builder.add("crdup", 127, "CRUDP"); 210 | builder.add("sscopmce", 128, "SSCOPMCE"); 211 | builder.add("iplt", 129, "IPLT"); 212 | builder.add("sps", 130, "SPS"); 213 | builder.add("pipe", 131, "PIPE"); 214 | builder.add("sctp", 132, "SCTP"); 215 | builder.add("fc", 133, "FC"); 216 | builder.add("divert", 254, "DIVERT"); 217 | 218 | 219 | return builder; 220 | } 221 | } 222 | -------------------------------------------------------------------------------- /src/main/java/jnr/netdb/IANAServicesDB.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2010 Wayne Meissner 3 | * 4 | * This file is part of jnr. 5 | * 6 | * Licensed under the Apache License, Version 2.0 (the "License"); 7 | * you may not use this file except in compliance with the License. 8 | * You may obtain a copy of the License at 9 | * 10 | * http://www.apache.org/licenses/LICENSE-2.0 11 | * 12 | * Unless required by applicable law or agreed to in writing, software 13 | * distributed under the License is distributed on an "AS IS" BASIS, 14 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 15 | * See the License for the specific language governing permissions and 16 | * limitations under the License. 17 | */ 18 | 19 | package jnr.netdb; 20 | 21 | import java.util.ArrayList; 22 | import java.util.Collections; 23 | import java.util.Map; 24 | import java.util.HashMap; 25 | import java.util.List; 26 | 27 | final class IANAServicesDB implements ServicesDB { 28 | private final Map tcpPortToService; 29 | private final Map udpPortToService; 30 | private final Map tcpNameToService; 31 | private final Map udpNameToService; 32 | private final List allServices; 33 | 34 | private IANAServicesDB(Map tcpNameToService, Map udpNameToService, 35 | Map tcpServices, Map udpServices) { 36 | this.tcpNameToService = tcpNameToService; 37 | this.udpNameToService = udpNameToService; 38 | this.tcpPortToService = tcpServices; 39 | this.udpPortToService = udpServices; 40 | 41 | List services = new ArrayList(tcpNameToService.size() + udpNameToService.size()); 42 | services.addAll(tcpNameToService.values()); 43 | services.addAll(udpNameToService.values()); 44 | this.allServices = Collections.unmodifiableList(services); 45 | } 46 | 47 | private static final class SingletonHolder { 48 | public static final IANAServicesDB INSTANCE = buildServices(); 49 | } 50 | 51 | public static final IANAServicesDB getInstance() { 52 | return SingletonHolder.INSTANCE; 53 | } 54 | 55 | public final Service getServiceByName(String name, String proto) { 56 | if ("tcp".equals(proto)) { 57 | return tcpNameToService.get(name); 58 | 59 | } else if ("udp".equals(proto)) { 60 | return udpNameToService.get(name); 61 | 62 | } else if (proto == null) { 63 | // a proto of null matches any service protocol 64 | Service s = tcpNameToService.get(name); 65 | return s != null ? s : udpNameToService.get(name); 66 | 67 | } else { 68 | return null; 69 | } 70 | } 71 | 72 | 73 | public final Service getServiceByPort(Integer port, String proto) { 74 | if ("tcp".equals(proto)) { 75 | return tcpPortToService.get(port); 76 | 77 | } else if ("udp".equals(proto)) { 78 | return udpPortToService.get(port); 79 | 80 | } else if (proto == null) { 81 | // a proto of null matches any service protocol 82 | Service s = tcpPortToService.get(port); 83 | return s != null ? s : udpPortToService.get(port); 84 | 85 | } else { 86 | return null; 87 | } 88 | } 89 | 90 | public final List getAllServices() { 91 | return allServices; 92 | } 93 | 94 | private static final class ServicesBuilder { 95 | private static final List emptyAliases = Collections.emptyList(); 96 | final Map tcpNameToService = new HashMap(); 97 | final Map udpNameToService = new HashMap(); 98 | final Map tcpPortToService = new HashMap(); 99 | final Map udpPortToService = new HashMap(); 100 | 101 | public final void add(String service, int port) { 102 | String[] descr = service.split("/"); 103 | 104 | add(descr[0], descr[1], port); 105 | } 106 | 107 | public final void add(String service, String proto, int port) { 108 | 109 | Service s = new Service(service, port, proto, emptyAliases); 110 | 111 | if ("tcp".equals(proto)) { 112 | tcpNameToService.put(service, s); 113 | tcpPortToService.put(port, s); 114 | 115 | } else if ("udp".equals(proto)) { 116 | udpNameToService.put(service, s); 117 | udpPortToService.put(port, s); 118 | } 119 | } 120 | 121 | IANAServicesDB build() { 122 | return new IANAServicesDB(tcpNameToService, udpNameToService, tcpPortToService, udpPortToService); 123 | } 124 | } 125 | 126 | private static final IANAServicesDB buildServices() { 127 | 128 | ServicesBuilder builder = new ServicesBuilder(); 129 | 130 | builder.add("spr-itunes", "tcp", 0); 131 | 132 | builder.add("spl-itunes", "tcp", 0); 133 | 134 | builder.add("tcpmux", "tcp", 1); 135 | 136 | builder.add("tcpmux", "udp", 1); 137 | 138 | builder.add("compressnet", "tcp", 2); 139 | 140 | builder.add("compressnet", "udp", 2); 141 | 142 | builder.add("compressnet", "tcp", 3); 143 | 144 | builder.add("compressnet", "udp", 3); 145 | 146 | builder.add("rje", "tcp", 5); 147 | 148 | builder.add("rje", "udp", 5); 149 | 150 | builder.add("echo", "tcp", 7); 151 | 152 | builder.add("echo", "udp", 7); 153 | 154 | builder.add("discard", "tcp", 9); 155 | 156 | builder.add("discard", "udp", 9); 157 | 158 | builder.add("discard/sctp", 9); 159 | 160 | builder.add("discard/dccp", 9); 161 | 162 | builder.add("systat", "tcp", 11); 163 | 164 | builder.add("systat", "udp", 11); 165 | 166 | builder.add("daytime", "tcp", 13); 167 | 168 | builder.add("daytime", "udp", 13); 169 | 170 | builder.add("qotd", "tcp", 17); 171 | 172 | builder.add("qotd", "udp", 17); 173 | 174 | builder.add("msp", "tcp", 18); 175 | 176 | builder.add("msp", "udp", 18); 177 | 178 | builder.add("chargen", "tcp", 19); 179 | 180 | builder.add("chargen", "udp", 19); 181 | 182 | builder.add("ftp-data", "tcp", 20); 183 | 184 | builder.add("ftp-data", "udp", 20); 185 | 186 | builder.add("ftp-data/sctp", 20); 187 | 188 | builder.add("ftp", "tcp", 21); 189 | 190 | builder.add("ftp", "udp", 21); 191 | 192 | builder.add("ftp/sctp", 21); 193 | 194 | builder.add("ssh", "tcp", 22); 195 | 196 | builder.add("ssh", "udp", 22); 197 | 198 | builder.add("ssh/sctp", 22); 199 | 200 | builder.add("telnet", "tcp", 23); 201 | 202 | builder.add("telnet", "udp", 23); 203 | 204 | builder.add("smtp", "tcp", 25); 205 | 206 | builder.add("smtp", "udp", 25); 207 | 208 | builder.add("nsw-fe", "tcp", 27); 209 | 210 | builder.add("nsw-fe", "udp", 27); 211 | 212 | builder.add("msg-icp", "tcp", 29); 213 | 214 | builder.add("msg-icp", "udp", 29); 215 | 216 | builder.add("msg-auth", "tcp", 31); 217 | 218 | builder.add("msg-auth", "udp", 31); 219 | 220 | builder.add("dsp", "tcp", 33); 221 | 222 | builder.add("dsp", "udp", 33); 223 | 224 | builder.add("time", "tcp", 37); 225 | 226 | builder.add("time", "udp", 37); 227 | 228 | builder.add("rap", "tcp", 38); 229 | 230 | builder.add("rap", "udp", 38); 231 | 232 | builder.add("rlp", "tcp", 39); 233 | 234 | builder.add("rlp", "udp", 39); 235 | 236 | builder.add("graphics", "tcp", 41); 237 | 238 | builder.add("graphics", "udp", 41); 239 | 240 | builder.add("name", "tcp", 42); 241 | 242 | builder.add("name", "udp", 42); 243 | 244 | builder.add("nameserver", "tcp", 42); 245 | 246 | builder.add("nameserver", "udp", 42); 247 | 248 | builder.add("nicname", "tcp", 43); 249 | 250 | builder.add("nicname", "udp", 43); 251 | 252 | builder.add("mpm-flags", "tcp", 44); 253 | 254 | builder.add("mpm-flags", "udp", 44); 255 | 256 | builder.add("mpm", "tcp", 45); 257 | 258 | builder.add("mpm", "udp", 45); 259 | 260 | builder.add("mpm-snd", "tcp", 46); 261 | 262 | builder.add("mpm-snd", "udp", 46); 263 | 264 | builder.add("ni-ftp", "tcp", 47); 265 | 266 | builder.add("ni-ftp", "udp", 47); 267 | 268 | builder.add("auditd", "tcp", 48); 269 | 270 | builder.add("auditd", "udp", 48); 271 | 272 | builder.add("tacacs", "tcp", 49); 273 | 274 | builder.add("tacacs", "udp", 49); 275 | 276 | builder.add("re-mail-ck", "tcp", 50); 277 | 278 | builder.add("re-mail-ck", "udp", 50); 279 | 280 | builder.add("la-maint", "tcp", 51); 281 | 282 | builder.add("la-maint", "udp", 51); 283 | 284 | builder.add("xns-time", "tcp", 52); 285 | 286 | builder.add("xns-time", "udp", 52); 287 | 288 | builder.add("domain", "tcp", 53); 289 | 290 | builder.add("domain", "udp", 53); 291 | 292 | builder.add("xns-ch", "tcp", 54); 293 | 294 | builder.add("xns-ch", "udp", 54); 295 | 296 | builder.add("isi-gl", "tcp", 55); 297 | 298 | builder.add("isi-gl", "udp", 55); 299 | 300 | builder.add("xns-auth", "tcp", 56); 301 | 302 | builder.add("xns-auth", "udp", 56); 303 | 304 | builder.add("xns-mail", "tcp", 58); 305 | 306 | builder.add("xns-mail", "udp", 58); 307 | 308 | builder.add("ni-mail", "tcp", 61); 309 | 310 | builder.add("ni-mail", "udp", 61); 311 | 312 | builder.add("acas", "tcp", 62); 313 | 314 | builder.add("acas", "udp", 62); 315 | 316 | builder.add("whois++", "tcp", 63); 317 | 318 | builder.add("whois++", "udp", 63); 319 | 320 | builder.add("covia", "tcp", 64); 321 | 322 | builder.add("covia", "udp", 64); 323 | 324 | builder.add("tacacs-ds", "tcp", 65); 325 | 326 | builder.add("tacacs-ds", "udp", 65); 327 | 328 | builder.add("sql*net", "tcp", 66); 329 | 330 | builder.add("sql*net", "udp", 66); 331 | 332 | builder.add("bootps", "tcp", 67); 333 | 334 | builder.add("bootps", "udp", 67); 335 | 336 | builder.add("bootpc", "tcp", 68); 337 | 338 | builder.add("bootpc", "udp", 68); 339 | 340 | builder.add("tftp", "tcp", 69); 341 | 342 | builder.add("tftp", "udp", 69); 343 | 344 | builder.add("gopher", "tcp", 70); 345 | 346 | builder.add("gopher", "udp", 70); 347 | 348 | builder.add("netrjs-1", "tcp", 71); 349 | 350 | builder.add("netrjs-1", "udp", 71); 351 | 352 | builder.add("netrjs-2", "tcp", 72); 353 | 354 | builder.add("netrjs-2", "udp", 72); 355 | 356 | builder.add("netrjs-3", "tcp", 73); 357 | 358 | builder.add("netrjs-3", "udp", 73); 359 | 360 | builder.add("netrjs-4", "tcp", 74); 361 | 362 | builder.add("netrjs-4", "udp", 74); 363 | 364 | builder.add("deos", "tcp", 76); 365 | 366 | builder.add("deos", "udp", 76); 367 | 368 | builder.add("vettcp", "tcp", 78); 369 | 370 | builder.add("vettcp", "udp", 78); 371 | 372 | builder.add("finger", "tcp", 79); 373 | 374 | builder.add("finger", "udp", 79); 375 | 376 | builder.add("http", "tcp", 80); 377 | 378 | builder.add("http", "udp", 80); 379 | 380 | builder.add("www", "tcp", 80); 381 | 382 | builder.add("www", "udp", 80); 383 | 384 | builder.add("www-http", "tcp", 80); 385 | 386 | builder.add("www-http", "udp", 80); 387 | 388 | builder.add("http/sctp", 80); 389 | 390 | builder.add("xfer", "tcp", 82); 391 | 392 | builder.add("xfer", "udp", 82); 393 | 394 | builder.add("mit-ml-dev", "tcp", 83); 395 | 396 | builder.add("mit-ml-dev", "udp", 83); 397 | 398 | builder.add("ctf", "tcp", 84); 399 | 400 | builder.add("ctf", "udp", 84); 401 | 402 | builder.add("mit-ml-dev", "tcp", 85); 403 | 404 | builder.add("mit-ml-dev", "udp", 85); 405 | 406 | builder.add("mfcobol", "tcp", 86); 407 | 408 | builder.add("mfcobol", "udp", 86); 409 | 410 | builder.add("kerberos", "tcp", 88); 411 | 412 | builder.add("kerberos", "udp", 88); 413 | 414 | builder.add("su-mit-tg", "tcp", 89); 415 | 416 | builder.add("su-mit-tg", "udp", 89); 417 | 418 | builder.add("dnsix", "tcp", 90); 419 | 420 | builder.add("dnsix", "udp", 90); 421 | 422 | builder.add("mit-dov", "tcp", 91); 423 | 424 | builder.add("mit-dov", "udp", 91); 425 | 426 | builder.add("npp", "tcp", 92); 427 | 428 | builder.add("npp", "udp", 92); 429 | 430 | builder.add("dcp", "tcp", 93); 431 | 432 | builder.add("dcp", "udp", 93); 433 | 434 | builder.add("objcall", "tcp", 94); 435 | 436 | builder.add("objcall", "udp", 94); 437 | 438 | builder.add("supdup", "tcp", 95); 439 | 440 | builder.add("supdup", "udp", 95); 441 | 442 | builder.add("dixie", "tcp", 96); 443 | 444 | builder.add("dixie", "udp", 96); 445 | 446 | builder.add("swift-rvf", "tcp", 97); 447 | 448 | builder.add("swift-rvf", "udp", 97); 449 | 450 | builder.add("tacnews", "tcp", 98); 451 | 452 | builder.add("tacnews", "udp", 98); 453 | 454 | builder.add("metagram", "tcp", 99); 455 | 456 | builder.add("metagram", "udp", 99); 457 | 458 | builder.add("newacct", "tcp", 100); 459 | 460 | builder.add("hostname", "tcp", 101); 461 | 462 | builder.add("hostname", "udp", 101); 463 | 464 | builder.add("iso-tsap", "tcp", 102); 465 | 466 | builder.add("iso-tsap", "udp", 102); 467 | 468 | builder.add("gppitnp", "tcp", 103); 469 | 470 | builder.add("gppitnp", "udp", 103); 471 | 472 | builder.add("acr-nema", "tcp", 104); 473 | 474 | builder.add("acr-nema", "udp", 104); 475 | 476 | builder.add("cso", "tcp", 105); 477 | 478 | builder.add("cso", "udp", 105); 479 | 480 | builder.add("csnet-ns", "tcp", 105); 481 | 482 | builder.add("csnet-ns", "udp", 105); 483 | 484 | builder.add("3com-tsmux", "tcp", 106); 485 | 486 | builder.add("3com-tsmux", "udp", 106); 487 | 488 | builder.add("rtelnet", "tcp", 107); 489 | 490 | builder.add("rtelnet", "udp", 107); 491 | 492 | builder.add("snagas", "tcp", 108); 493 | 494 | builder.add("snagas", "udp", 108); 495 | 496 | builder.add("pop2", "tcp", 109); 497 | 498 | builder.add("pop2", "udp", 109); 499 | 500 | builder.add("pop3", "tcp", 110); 501 | 502 | builder.add("pop3", "udp", 110); 503 | 504 | builder.add("sunrpc", "tcp", 111); 505 | 506 | builder.add("sunrpc", "udp", 111); 507 | 508 | builder.add("mcidas", "tcp", 112); 509 | 510 | builder.add("mcidas", "udp", 112); 511 | 512 | builder.add("ident", "tcp", 113); 513 | 514 | builder.add("auth", "tcp", 113); 515 | 516 | builder.add("auth", "udp", 113); 517 | 518 | builder.add("sftp", "tcp", 115); 519 | 520 | builder.add("sftp", "udp", 115); 521 | 522 | builder.add("ansanotify", "tcp", 116); 523 | 524 | builder.add("ansanotify", "udp", 116); 525 | 526 | builder.add("uucp-path", "tcp", 117); 527 | 528 | builder.add("uucp-path", "udp", 117); 529 | 530 | builder.add("sqlserv", "tcp", 118); 531 | 532 | builder.add("sqlserv", "udp", 118); 533 | 534 | builder.add("nntp", "tcp", 119); 535 | 536 | builder.add("nntp", "udp", 119); 537 | 538 | builder.add("cfdptkt", "tcp", 120); 539 | 540 | builder.add("cfdptkt", "udp", 120); 541 | 542 | builder.add("erpc", "tcp", 121); 543 | 544 | builder.add("erpc", "udp", 121); 545 | 546 | builder.add("smakynet", "tcp", 122); 547 | 548 | builder.add("smakynet", "udp", 122); 549 | 550 | builder.add("ntp", "tcp", 123); 551 | 552 | builder.add("ntp", "udp", 123); 553 | 554 | builder.add("ansatrader", "tcp", 124); 555 | 556 | builder.add("ansatrader", "udp", 124); 557 | 558 | builder.add("locus-map", "tcp", 125); 559 | 560 | builder.add("locus-map", "udp", 125); 561 | 562 | builder.add("nxedit", "tcp", 126); 563 | 564 | builder.add("nxedit", "udp", 126); 565 | 566 | builder.add("locus-con", "tcp", 127); 567 | 568 | builder.add("locus-con", "udp", 127); 569 | 570 | builder.add("gss-xlicen", "tcp", 128); 571 | 572 | builder.add("gss-xlicen", "udp", 128); 573 | 574 | builder.add("pwdgen", "tcp", 129); 575 | 576 | builder.add("pwdgen", "udp", 129); 577 | 578 | builder.add("cisco-fna", "tcp", 130); 579 | 580 | builder.add("cisco-fna", "udp", 130); 581 | 582 | builder.add("cisco-tna", "tcp", 131); 583 | 584 | builder.add("cisco-tna", "udp", 131); 585 | 586 | builder.add("cisco-sys", "tcp", 132); 587 | 588 | builder.add("cisco-sys", "udp", 132); 589 | 590 | builder.add("statsrv", "tcp", 133); 591 | 592 | builder.add("statsrv", "udp", 133); 593 | 594 | builder.add("ingres-net", "tcp", 134); 595 | 596 | builder.add("ingres-net", "udp", 134); 597 | 598 | builder.add("epmap", "tcp", 135); 599 | 600 | builder.add("epmap", "udp", 135); 601 | 602 | builder.add("profile", "tcp", 136); 603 | 604 | builder.add("profile", "udp", 136); 605 | 606 | builder.add("netbios-ns", "tcp", 137); 607 | 608 | builder.add("netbios-ns", "udp", 137); 609 | 610 | builder.add("netbios-dgm", "tcp", 138); 611 | 612 | builder.add("netbios-dgm", "udp", 138); 613 | 614 | builder.add("netbios-ssn", "tcp", 139); 615 | 616 | builder.add("netbios-ssn", "udp", 139); 617 | 618 | builder.add("emfis-data", "tcp", 140); 619 | 620 | builder.add("emfis-data", "udp", 140); 621 | 622 | builder.add("emfis-cntl", "tcp", 141); 623 | 624 | builder.add("emfis-cntl", "udp", 141); 625 | 626 | builder.add("bl-idm", "tcp", 142); 627 | 628 | builder.add("bl-idm", "udp", 142); 629 | 630 | builder.add("imap", "tcp", 143); 631 | 632 | builder.add("imap", "udp", 143); 633 | 634 | builder.add("uma", "tcp", 144); 635 | 636 | builder.add("uma", "udp", 144); 637 | 638 | builder.add("uaac", "tcp", 145); 639 | 640 | builder.add("uaac", "udp", 145); 641 | 642 | builder.add("iso-tp0", "tcp", 146); 643 | 644 | builder.add("iso-tp0", "udp", 146); 645 | 646 | builder.add("iso-ip", "tcp", 147); 647 | 648 | builder.add("iso-ip", "udp", 147); 649 | 650 | builder.add("jargon", "tcp", 148); 651 | 652 | builder.add("jargon", "udp", 148); 653 | 654 | builder.add("aed-512", "tcp", 149); 655 | 656 | builder.add("aed-512", "udp", 149); 657 | 658 | builder.add("sql-net", "tcp", 150); 659 | 660 | builder.add("sql-net", "udp", 150); 661 | 662 | builder.add("hems", "tcp", 151); 663 | 664 | builder.add("hems", "udp", 151); 665 | 666 | builder.add("bftp", "tcp", 152); 667 | 668 | builder.add("bftp", "udp", 152); 669 | 670 | builder.add("sgmp", "tcp", 153); 671 | 672 | builder.add("sgmp", "udp", 153); 673 | 674 | builder.add("netsc-prod", "tcp", 154); 675 | 676 | builder.add("netsc-prod", "udp", 154); 677 | 678 | builder.add("netsc-dev", "tcp", 155); 679 | 680 | builder.add("netsc-dev", "udp", 155); 681 | 682 | builder.add("sqlsrv", "tcp", 156); 683 | 684 | builder.add("sqlsrv", "udp", 156); 685 | 686 | builder.add("knet-cmp", "tcp", 157); 687 | 688 | builder.add("knet-cmp", "udp", 157); 689 | 690 | builder.add("pcmail-srv", "tcp", 158); 691 | 692 | builder.add("pcmail-srv", "udp", 158); 693 | 694 | builder.add("nss-routing", "tcp", 159); 695 | 696 | builder.add("nss-routing", "udp", 159); 697 | 698 | builder.add("sgmp-traps", "tcp", 160); 699 | 700 | builder.add("sgmp-traps", "udp", 160); 701 | 702 | builder.add("snmp", "tcp", 161); 703 | 704 | builder.add("snmp", "udp", 161); 705 | 706 | builder.add("snmptrap", "tcp", 162); 707 | 708 | builder.add("snmptrap", "udp", 162); 709 | 710 | builder.add("cmip-man", "tcp", 163); 711 | 712 | builder.add("cmip-man", "udp", 163); 713 | 714 | builder.add("cmip-agent", "tcp", 164); 715 | 716 | builder.add("cmip-agent", "udp", 164); 717 | 718 | builder.add("xns-courier", "tcp", 165); 719 | 720 | builder.add("xns-courier", "udp", 165); 721 | 722 | builder.add("s-net", "tcp", 166); 723 | 724 | builder.add("s-net", "udp", 166); 725 | 726 | builder.add("namp", "tcp", 167); 727 | 728 | builder.add("namp", "udp", 167); 729 | 730 | builder.add("rsvd", "tcp", 168); 731 | 732 | builder.add("rsvd", "udp", 168); 733 | 734 | builder.add("send", "tcp", 169); 735 | 736 | builder.add("send", "udp", 169); 737 | 738 | builder.add("print-srv", "tcp", 170); 739 | 740 | builder.add("print-srv", "udp", 170); 741 | 742 | builder.add("multiplex", "tcp", 171); 743 | 744 | builder.add("multiplex", "udp", 171); 745 | 746 | builder.add("cl/1", "tcp", 172); 747 | 748 | builder.add("cl/1", "udp", 172); 749 | 750 | builder.add("xyplex-mux", "tcp", 173); 751 | 752 | builder.add("xyplex-mux", "udp", 173); 753 | 754 | builder.add("mailq", "tcp", 174); 755 | 756 | builder.add("mailq", "udp", 174); 757 | 758 | builder.add("vmnet", "tcp", 175); 759 | 760 | builder.add("vmnet", "udp", 175); 761 | 762 | builder.add("genrad-mux", "tcp", 176); 763 | 764 | builder.add("genrad-mux", "udp", 176); 765 | 766 | builder.add("xdmcp", "tcp", 177); 767 | 768 | builder.add("xdmcp", "udp", 177); 769 | 770 | builder.add("nextstep", "tcp", 178); 771 | 772 | builder.add("nextstep", "udp", 178); 773 | 774 | builder.add("bgp", "tcp", 179); 775 | 776 | builder.add("bgp", "udp", 179); 777 | 778 | builder.add("bgp/sctp", 179); 779 | 780 | builder.add("ris", "tcp", 180); 781 | 782 | builder.add("ris", "udp", 180); 783 | 784 | builder.add("unify", "tcp", 181); 785 | 786 | builder.add("unify", "udp", 181); 787 | 788 | builder.add("audit", "tcp", 182); 789 | 790 | builder.add("audit", "udp", 182); 791 | 792 | builder.add("ocbinder", "tcp", 183); 793 | 794 | builder.add("ocbinder", "udp", 183); 795 | 796 | builder.add("ocserver", "tcp", 184); 797 | 798 | builder.add("ocserver", "udp", 184); 799 | 800 | builder.add("remote-kis", "tcp", 185); 801 | 802 | builder.add("remote-kis", "udp", 185); 803 | 804 | builder.add("kis", "tcp", 186); 805 | 806 | builder.add("kis", "udp", 186); 807 | 808 | builder.add("aci", "tcp", 187); 809 | 810 | builder.add("aci", "udp", 187); 811 | 812 | builder.add("mumps", "tcp", 188); 813 | 814 | builder.add("mumps", "udp", 188); 815 | 816 | builder.add("qft", "tcp", 189); 817 | 818 | builder.add("qft", "udp", 189); 819 | 820 | builder.add("gacp", "tcp", 190); 821 | 822 | builder.add("gacp", "udp", 190); 823 | 824 | builder.add("prospero", "tcp", 191); 825 | 826 | builder.add("prospero", "udp", 191); 827 | 828 | builder.add("osu-nms", "tcp", 192); 829 | 830 | builder.add("osu-nms", "udp", 192); 831 | 832 | builder.add("srmp", "tcp", 193); 833 | 834 | builder.add("srmp", "udp", 193); 835 | 836 | builder.add("irc", "tcp", 194); 837 | 838 | builder.add("irc", "udp", 194); 839 | 840 | builder.add("dn6-nlm-aud", "tcp", 195); 841 | 842 | builder.add("dn6-nlm-aud", "udp", 195); 843 | 844 | builder.add("dn6-smm-red", "tcp", 196); 845 | 846 | builder.add("dn6-smm-red", "udp", 196); 847 | 848 | builder.add("dls", "tcp", 197); 849 | 850 | builder.add("dls", "udp", 197); 851 | 852 | builder.add("dls-mon", "tcp", 198); 853 | 854 | builder.add("dls-mon", "udp", 198); 855 | 856 | builder.add("smux", "tcp", 199); 857 | 858 | builder.add("smux", "udp", 199); 859 | 860 | builder.add("src", "tcp", 200); 861 | 862 | builder.add("src", "udp", 200); 863 | 864 | builder.add("at-rtmp", "tcp", 201); 865 | 866 | builder.add("at-rtmp", "udp", 201); 867 | 868 | builder.add("at-nbp", "tcp", 202); 869 | 870 | builder.add("at-nbp", "udp", 202); 871 | 872 | builder.add("at-3", "tcp", 203); 873 | 874 | builder.add("at-3", "udp", 203); 875 | 876 | builder.add("at-echo", "tcp", 204); 877 | 878 | builder.add("at-echo", "udp", 204); 879 | 880 | builder.add("at-5", "tcp", 205); 881 | 882 | builder.add("at-5", "udp", 205); 883 | 884 | builder.add("at-zis", "tcp", 206); 885 | 886 | builder.add("at-zis", "udp", 206); 887 | 888 | builder.add("at-7", "tcp", 207); 889 | 890 | builder.add("at-7", "udp", 207); 891 | 892 | builder.add("at-8", "tcp", 208); 893 | 894 | builder.add("at-8", "udp", 208); 895 | 896 | builder.add("qmtp", "tcp", 209); 897 | 898 | builder.add("qmtp", "udp", 209); 899 | 900 | builder.add("z39.50", "tcp", 210); 901 | 902 | builder.add("z39.50", "udp", 210); 903 | 904 | builder.add("914c/g", "tcp", 211); 905 | 906 | builder.add("914c/g", "udp", 211); 907 | 908 | builder.add("anet", "tcp", 212); 909 | 910 | builder.add("anet", "udp", 212); 911 | 912 | builder.add("ipx", "tcp", 213); 913 | 914 | builder.add("ipx", "udp", 213); 915 | 916 | builder.add("vmpwscs", "tcp", 214); 917 | 918 | builder.add("vmpwscs", "udp", 214); 919 | 920 | builder.add("softpc", "tcp", 215); 921 | 922 | builder.add("softpc", "udp", 215); 923 | 924 | builder.add("CAIlic", "tcp", 216); 925 | 926 | builder.add("CAIlic", "udp", 216); 927 | 928 | builder.add("dbase", "tcp", 217); 929 | 930 | builder.add("dbase", "udp", 217); 931 | 932 | builder.add("mpp", "tcp", 218); 933 | 934 | builder.add("mpp", "udp", 218); 935 | 936 | builder.add("uarps", "tcp", 219); 937 | 938 | builder.add("uarps", "udp", 219); 939 | 940 | builder.add("imap3", "tcp", 220); 941 | 942 | builder.add("imap3", "udp", 220); 943 | 944 | builder.add("fln-spx", "tcp", 221); 945 | 946 | builder.add("fln-spx", "udp", 221); 947 | 948 | builder.add("rsh-spx", "tcp", 222); 949 | 950 | builder.add("rsh-spx", "udp", 222); 951 | 952 | builder.add("cdc", "tcp", 223); 953 | 954 | builder.add("cdc", "udp", 223); 955 | 956 | builder.add("masqdialer", "tcp", 224); 957 | 958 | builder.add("masqdialer", "udp", 224); 959 | 960 | builder.add("direct", "tcp", 242); 961 | 962 | builder.add("direct", "udp", 242); 963 | 964 | builder.add("sur-meas", "tcp", 243); 965 | 966 | builder.add("sur-meas", "udp", 243); 967 | 968 | builder.add("inbusiness", "tcp", 244); 969 | 970 | builder.add("inbusiness", "udp", 244); 971 | 972 | builder.add("link", "tcp", 245); 973 | 974 | builder.add("link", "udp", 245); 975 | 976 | builder.add("dsp3270", "tcp", 246); 977 | 978 | builder.add("dsp3270", "udp", 246); 979 | 980 | builder.add("subntbcst_tftp", "tcp", 247); 981 | 982 | builder.add("subntbcst_tftp", "udp", 247); 983 | 984 | builder.add("bhfhs", "tcp", 248); 985 | 986 | builder.add("bhfhs", "udp", 248); 987 | 988 | builder.add("rap", "tcp", 256); 989 | 990 | builder.add("rap", "udp", 256); 991 | 992 | builder.add("set", "tcp", 257); 993 | 994 | builder.add("set", "udp", 257); 995 | 996 | builder.add("esro-gen", "tcp", 259); 997 | 998 | builder.add("esro-gen", "udp", 259); 999 | 1000 | builder.add("openport", "tcp", 260); 1001 | 1002 | builder.add("openport", "udp", 260); 1003 | 1004 | builder.add("nsiiops", "tcp", 261); 1005 | 1006 | builder.add("nsiiops", "udp", 261); 1007 | 1008 | builder.add("arcisdms", "tcp", 262); 1009 | 1010 | builder.add("arcisdms", "udp", 262); 1011 | 1012 | builder.add("hdap", "tcp", 263); 1013 | 1014 | builder.add("hdap", "udp", 263); 1015 | 1016 | builder.add("bgmp", "tcp", 264); 1017 | 1018 | builder.add("bgmp", "udp", 264); 1019 | 1020 | builder.add("x-bone-ctl", "tcp", 265); 1021 | 1022 | builder.add("x-bone-ctl", "udp", 265); 1023 | 1024 | builder.add("sst", "tcp", 266); 1025 | 1026 | builder.add("sst", "udp", 266); 1027 | 1028 | builder.add("td-service", "tcp", 267); 1029 | 1030 | builder.add("td-service", "udp", 267); 1031 | 1032 | builder.add("td-replica", "tcp", 268); 1033 | 1034 | builder.add("td-replica", "udp", 268); 1035 | 1036 | builder.add("manet", "tcp", 269); 1037 | 1038 | builder.add("manet", "udp", 269); 1039 | 1040 | builder.add("http-mgmt", "tcp", 280); 1041 | 1042 | builder.add("http-mgmt", "udp", 280); 1043 | 1044 | builder.add("personal-link", "tcp", 281); 1045 | 1046 | builder.add("personal-link", "udp", 281); 1047 | 1048 | builder.add("cableport-ax", "tcp", 282); 1049 | 1050 | builder.add("cableport-ax", "udp", 282); 1051 | 1052 | builder.add("rescap", "tcp", 283); 1053 | 1054 | builder.add("rescap", "udp", 283); 1055 | 1056 | builder.add("corerjd", "tcp", 284); 1057 | 1058 | builder.add("corerjd", "udp", 284); 1059 | 1060 | builder.add("fxp", "tcp", 286); 1061 | 1062 | builder.add("fxp", "udp", 286); 1063 | 1064 | builder.add("k-block", "tcp", 287); 1065 | 1066 | builder.add("k-block", "udp", 287); 1067 | 1068 | builder.add("novastorbakcup", "tcp", 308); 1069 | 1070 | builder.add("novastorbakcup", "udp", 308); 1071 | 1072 | builder.add("entrusttime", "tcp", 309); 1073 | 1074 | builder.add("entrusttime", "udp", 309); 1075 | 1076 | builder.add("bhmds", "tcp", 310); 1077 | 1078 | builder.add("bhmds", "udp", 310); 1079 | 1080 | builder.add("asip-webadmin", "tcp", 311); 1081 | 1082 | builder.add("asip-webadmin", "udp", 311); 1083 | 1084 | builder.add("vslmp", "tcp", 312); 1085 | 1086 | builder.add("vslmp", "udp", 312); 1087 | 1088 | builder.add("magenta-logic", "tcp", 313); 1089 | 1090 | builder.add("magenta-logic", "udp", 313); 1091 | 1092 | builder.add("opalis-robot", "tcp", 314); 1093 | 1094 | builder.add("opalis-robot", "udp", 314); 1095 | 1096 | builder.add("dpsi", "tcp", 315); 1097 | 1098 | builder.add("dpsi", "udp", 315); 1099 | 1100 | builder.add("decauth", "tcp", 316); 1101 | 1102 | builder.add("decauth", "udp", 316); 1103 | 1104 | builder.add("zannet", "tcp", 317); 1105 | 1106 | builder.add("zannet", "udp", 317); 1107 | 1108 | builder.add("pkix-timestamp", "tcp", 318); 1109 | 1110 | builder.add("pkix-timestamp", "udp", 318); 1111 | 1112 | builder.add("ptp-event", "tcp", 319); 1113 | 1114 | builder.add("ptp-event", "udp", 319); 1115 | 1116 | builder.add("ptp-general", "tcp", 320); 1117 | 1118 | builder.add("ptp-general", "udp", 320); 1119 | 1120 | builder.add("pip", "tcp", 321); 1121 | 1122 | builder.add("pip", "udp", 321); 1123 | 1124 | builder.add("rtsps", "tcp", 322); 1125 | 1126 | builder.add("rtsps", "udp", 322); 1127 | 1128 | builder.add("texar", "tcp", 333); 1129 | 1130 | builder.add("texar", "udp", 333); 1131 | 1132 | builder.add("pdap", "tcp", 344); 1133 | 1134 | builder.add("pdap", "udp", 344); 1135 | 1136 | builder.add("pawserv", "tcp", 345); 1137 | 1138 | builder.add("pawserv", "udp", 345); 1139 | 1140 | builder.add("zserv", "tcp", 346); 1141 | 1142 | builder.add("zserv", "udp", 346); 1143 | 1144 | builder.add("fatserv", "tcp", 347); 1145 | 1146 | builder.add("fatserv", "udp", 347); 1147 | 1148 | builder.add("csi-sgwp", "tcp", 348); 1149 | 1150 | builder.add("csi-sgwp", "udp", 348); 1151 | 1152 | builder.add("mftp", "tcp", 349); 1153 | 1154 | builder.add("mftp", "udp", 349); 1155 | 1156 | builder.add("matip-type-a", "tcp", 350); 1157 | 1158 | builder.add("matip-type-a", "udp", 350); 1159 | 1160 | builder.add("matip-type-b", "tcp", 351); 1161 | 1162 | builder.add("matip-type-b", "udp", 351); 1163 | 1164 | builder.add("bhoetty", "tcp", 351); 1165 | 1166 | builder.add("bhoetty", "udp", 351); 1167 | 1168 | builder.add("dtag-ste-sb", "tcp", 352); 1169 | 1170 | builder.add("dtag-ste-sb", "udp", 352); 1171 | 1172 | builder.add("bhoedap4", "tcp", 352); 1173 | 1174 | builder.add("bhoedap4", "udp", 352); 1175 | 1176 | builder.add("ndsauth", "tcp", 353); 1177 | 1178 | builder.add("ndsauth", "udp", 353); 1179 | 1180 | builder.add("bh611", "tcp", 354); 1181 | 1182 | builder.add("bh611", "udp", 354); 1183 | 1184 | builder.add("datex-asn", "tcp", 355); 1185 | 1186 | builder.add("datex-asn", "udp", 355); 1187 | 1188 | builder.add("cloanto-net-1", "tcp", 356); 1189 | 1190 | builder.add("cloanto-net-1", "udp", 356); 1191 | 1192 | builder.add("bhevent", "tcp", 357); 1193 | 1194 | builder.add("bhevent", "udp", 357); 1195 | 1196 | builder.add("shrinkwrap", "tcp", 358); 1197 | 1198 | builder.add("shrinkwrap", "udp", 358); 1199 | 1200 | builder.add("nsrmp", "tcp", 359); 1201 | 1202 | builder.add("nsrmp", "udp", 359); 1203 | 1204 | builder.add("scoi2odialog", "tcp", 360); 1205 | 1206 | builder.add("scoi2odialog", "udp", 360); 1207 | 1208 | builder.add("semantix", "tcp", 361); 1209 | 1210 | builder.add("semantix", "udp", 361); 1211 | 1212 | builder.add("srssend", "tcp", 362); 1213 | 1214 | builder.add("srssend", "udp", 362); 1215 | 1216 | builder.add("rsvp_tunnel", "tcp", 363); 1217 | 1218 | builder.add("rsvp_tunnel", "udp", 363); 1219 | 1220 | builder.add("aurora-cmgr", "tcp", 364); 1221 | 1222 | builder.add("aurora-cmgr", "udp", 364); 1223 | 1224 | builder.add("dtk", "tcp", 365); 1225 | 1226 | builder.add("dtk", "udp", 365); 1227 | 1228 | builder.add("odmr", "tcp", 366); 1229 | 1230 | builder.add("odmr", "udp", 366); 1231 | 1232 | builder.add("mortgageware", "tcp", 367); 1233 | 1234 | builder.add("mortgageware", "udp", 367); 1235 | 1236 | builder.add("qbikgdp", "tcp", 368); 1237 | 1238 | builder.add("qbikgdp", "udp", 368); 1239 | 1240 | builder.add("rpc2portmap", "tcp", 369); 1241 | 1242 | builder.add("rpc2portmap", "udp", 369); 1243 | 1244 | builder.add("codaauth2", "tcp", 370); 1245 | 1246 | builder.add("codaauth2", "udp", 370); 1247 | 1248 | builder.add("clearcase", "tcp", 371); 1249 | 1250 | builder.add("clearcase", "udp", 371); 1251 | 1252 | builder.add("ulistproc", "tcp", 372); 1253 | 1254 | builder.add("ulistproc", "udp", 372); 1255 | 1256 | builder.add("legent-1", "tcp", 373); 1257 | 1258 | builder.add("legent-1", "udp", 373); 1259 | 1260 | builder.add("legent-2", "tcp", 374); 1261 | 1262 | builder.add("legent-2", "udp", 374); 1263 | 1264 | builder.add("hassle", "tcp", 375); 1265 | 1266 | builder.add("hassle", "udp", 375); 1267 | 1268 | builder.add("nip", "tcp", 376); 1269 | 1270 | builder.add("nip", "udp", 376); 1271 | 1272 | builder.add("tnETOS", "tcp", 377); 1273 | 1274 | builder.add("tnETOS", "udp", 377); 1275 | 1276 | builder.add("dsETOS", "tcp", 378); 1277 | 1278 | builder.add("dsETOS", "udp", 378); 1279 | 1280 | builder.add("is99c", "tcp", 379); 1281 | 1282 | builder.add("is99c", "udp", 379); 1283 | 1284 | builder.add("is99s", "tcp", 380); 1285 | 1286 | builder.add("is99s", "udp", 380); 1287 | 1288 | builder.add("hp-collector", "tcp", 381); 1289 | 1290 | builder.add("hp-collector", "udp", 381); 1291 | 1292 | builder.add("hp-managed-node", "tcp", 382); 1293 | 1294 | builder.add("hp-managed-node", "udp", 382); 1295 | 1296 | builder.add("hp-alarm-mgr", "tcp", 383); 1297 | 1298 | builder.add("hp-alarm-mgr", "udp", 383); 1299 | 1300 | builder.add("arns", "tcp", 384); 1301 | 1302 | builder.add("arns", "udp", 384); 1303 | 1304 | builder.add("ibm-app", "tcp", 385); 1305 | 1306 | builder.add("ibm-app", "udp", 385); 1307 | 1308 | builder.add("asa", "tcp", 386); 1309 | 1310 | builder.add("asa", "udp", 386); 1311 | 1312 | builder.add("aurp", "tcp", 387); 1313 | 1314 | builder.add("aurp", "udp", 387); 1315 | 1316 | builder.add("unidata-ldm", "tcp", 388); 1317 | 1318 | builder.add("unidata-ldm", "udp", 388); 1319 | 1320 | builder.add("ldap", "tcp", 389); 1321 | 1322 | builder.add("ldap", "udp", 389); 1323 | 1324 | builder.add("uis", "tcp", 390); 1325 | 1326 | builder.add("uis", "udp", 390); 1327 | 1328 | builder.add("synotics-relay", "tcp", 391); 1329 | 1330 | builder.add("synotics-relay", "udp", 391); 1331 | 1332 | builder.add("synotics-broker", "tcp", 392); 1333 | 1334 | builder.add("synotics-broker", "udp", 392); 1335 | 1336 | builder.add("meta5", "tcp", 393); 1337 | 1338 | builder.add("meta5", "udp", 393); 1339 | 1340 | builder.add("embl-ndt", "tcp", 394); 1341 | 1342 | builder.add("embl-ndt", "udp", 394); 1343 | 1344 | builder.add("netcp", "tcp", 395); 1345 | 1346 | builder.add("netcp", "udp", 395); 1347 | 1348 | builder.add("netware-ip", "tcp", 396); 1349 | 1350 | builder.add("netware-ip", "udp", 396); 1351 | 1352 | builder.add("mptn", "tcp", 397); 1353 | 1354 | builder.add("mptn", "udp", 397); 1355 | 1356 | builder.add("kryptolan", "tcp", 398); 1357 | 1358 | builder.add("kryptolan", "udp", 398); 1359 | 1360 | builder.add("iso-tsap-c2", "tcp", 399); 1361 | 1362 | builder.add("iso-tsap-c2", "udp", 399); 1363 | 1364 | builder.add("work-sol", "tcp", 400); 1365 | 1366 | builder.add("work-sol", "udp", 400); 1367 | 1368 | builder.add("ups", "tcp", 401); 1369 | 1370 | builder.add("ups", "udp", 401); 1371 | 1372 | builder.add("genie", "tcp", 402); 1373 | 1374 | builder.add("genie", "udp", 402); 1375 | 1376 | builder.add("decap", "tcp", 403); 1377 | 1378 | builder.add("decap", "udp", 403); 1379 | 1380 | builder.add("nced", "tcp", 404); 1381 | 1382 | builder.add("nced", "udp", 404); 1383 | 1384 | builder.add("ncld", "tcp", 405); 1385 | 1386 | builder.add("ncld", "udp", 405); 1387 | 1388 | builder.add("imsp", "tcp", 406); 1389 | 1390 | builder.add("imsp", "udp", 406); 1391 | 1392 | builder.add("timbuktu", "tcp", 407); 1393 | 1394 | builder.add("timbuktu", "udp", 407); 1395 | 1396 | builder.add("prm-sm", "tcp", 408); 1397 | 1398 | builder.add("prm-sm", "udp", 408); 1399 | 1400 | builder.add("prm-nm", "tcp", 409); 1401 | 1402 | builder.add("prm-nm", "udp", 409); 1403 | 1404 | builder.add("decladebug", "tcp", 410); 1405 | 1406 | builder.add("decladebug", "udp", 410); 1407 | 1408 | builder.add("rmt", "tcp", 411); 1409 | 1410 | builder.add("rmt", "udp", 411); 1411 | 1412 | builder.add("synoptics-trap", "tcp", 412); 1413 | 1414 | builder.add("synoptics-trap", "udp", 412); 1415 | 1416 | builder.add("smsp", "tcp", 413); 1417 | 1418 | builder.add("smsp", "udp", 413); 1419 | 1420 | builder.add("infoseek", "tcp", 414); 1421 | 1422 | builder.add("infoseek", "udp", 414); 1423 | 1424 | builder.add("bnet", "tcp", 415); 1425 | 1426 | builder.add("bnet", "udp", 415); 1427 | 1428 | builder.add("silverplatter", "tcp", 416); 1429 | 1430 | builder.add("silverplatter", "udp", 416); 1431 | 1432 | builder.add("onmux", "tcp", 417); 1433 | 1434 | builder.add("onmux", "udp", 417); 1435 | 1436 | builder.add("hyper-g", "tcp", 418); 1437 | 1438 | builder.add("hyper-g", "udp", 418); 1439 | 1440 | builder.add("ariel1", "tcp", 419); 1441 | 1442 | builder.add("ariel1", "udp", 419); 1443 | 1444 | builder.add("smpte", "tcp", 420); 1445 | 1446 | builder.add("smpte", "udp", 420); 1447 | 1448 | builder.add("ariel2", "tcp", 421); 1449 | 1450 | builder.add("ariel2", "udp", 421); 1451 | 1452 | builder.add("ariel3", "tcp", 422); 1453 | 1454 | builder.add("ariel3", "udp", 422); 1455 | 1456 | builder.add("opc-job-start", "tcp", 423); 1457 | 1458 | builder.add("opc-job-start", "udp", 423); 1459 | 1460 | builder.add("opc-job-track", "tcp", 424); 1461 | 1462 | builder.add("opc-job-track", "udp", 424); 1463 | 1464 | builder.add("icad-el", "tcp", 425); 1465 | 1466 | builder.add("icad-el", "udp", 425); 1467 | 1468 | builder.add("smartsdp", "tcp", 426); 1469 | 1470 | builder.add("smartsdp", "udp", 426); 1471 | 1472 | builder.add("svrloc", "tcp", 427); 1473 | 1474 | builder.add("svrloc", "udp", 427); 1475 | 1476 | builder.add("ocs_cmu", "tcp", 428); 1477 | 1478 | builder.add("ocs_cmu", "udp", 428); 1479 | 1480 | builder.add("ocs_amu", "tcp", 429); 1481 | 1482 | builder.add("ocs_amu", "udp", 429); 1483 | 1484 | builder.add("utmpsd", "tcp", 430); 1485 | 1486 | builder.add("utmpsd", "udp", 430); 1487 | 1488 | builder.add("utmpcd", "tcp", 431); 1489 | 1490 | builder.add("utmpcd", "udp", 431); 1491 | 1492 | builder.add("iasd", "tcp", 432); 1493 | 1494 | builder.add("iasd", "udp", 432); 1495 | 1496 | builder.add("nnsp", "tcp", 433); 1497 | 1498 | builder.add("nnsp", "udp", 433); 1499 | 1500 | builder.add("mobileip-agent", "tcp", 434); 1501 | 1502 | builder.add("mobileip-agent", "udp", 434); 1503 | 1504 | builder.add("mobilip-mn", "tcp", 435); 1505 | 1506 | builder.add("mobilip-mn", "udp", 435); 1507 | 1508 | builder.add("dna-cml", "tcp", 436); 1509 | 1510 | builder.add("dna-cml", "udp", 436); 1511 | 1512 | builder.add("comscm", "tcp", 437); 1513 | 1514 | builder.add("comscm", "udp", 437); 1515 | 1516 | builder.add("dsfgw", "tcp", 438); 1517 | 1518 | builder.add("dsfgw", "udp", 438); 1519 | 1520 | builder.add("dasp", "tcp", 439); 1521 | 1522 | builder.add("dasp", "udp", 439); 1523 | 1524 | builder.add("sgcp", "tcp", 440); 1525 | 1526 | builder.add("sgcp", "udp", 440); 1527 | 1528 | builder.add("decvms-sysmgt", "tcp", 441); 1529 | 1530 | builder.add("decvms-sysmgt", "udp", 441); 1531 | 1532 | builder.add("cvc_hostd", "tcp", 442); 1533 | 1534 | builder.add("cvc_hostd", "udp", 442); 1535 | 1536 | builder.add("https", "tcp", 443); 1537 | 1538 | builder.add("https", "udp", 443); 1539 | 1540 | builder.add("https/sctp", 443); 1541 | 1542 | builder.add("snpp", "tcp", 444); 1543 | 1544 | builder.add("snpp", "udp", 444); 1545 | 1546 | builder.add("microsoft-ds", "tcp", 445); 1547 | 1548 | builder.add("microsoft-ds", "udp", 445); 1549 | 1550 | builder.add("ddm-rdb", "tcp", 446); 1551 | 1552 | builder.add("ddm-rdb", "udp", 446); 1553 | 1554 | builder.add("ddm-dfm", "tcp", 447); 1555 | 1556 | builder.add("ddm-dfm", "udp", 447); 1557 | 1558 | builder.add("ddm-ssl", "tcp", 448); 1559 | 1560 | builder.add("ddm-ssl", "udp", 448); 1561 | 1562 | builder.add("as-servermap", "tcp", 449); 1563 | 1564 | builder.add("as-servermap", "udp", 449); 1565 | 1566 | builder.add("tserver", "tcp", 450); 1567 | 1568 | builder.add("tserver", "udp", 450); 1569 | 1570 | builder.add("sfs-smp-net", "tcp", 451); 1571 | 1572 | builder.add("sfs-smp-net", "udp", 451); 1573 | 1574 | builder.add("sfs-config", "tcp", 452); 1575 | 1576 | builder.add("sfs-config", "udp", 452); 1577 | 1578 | builder.add("creativeserver", "tcp", 453); 1579 | 1580 | builder.add("creativeserver", "udp", 453); 1581 | 1582 | builder.add("contentserver", "tcp", 454); 1583 | 1584 | builder.add("contentserver", "udp", 454); 1585 | 1586 | builder.add("creativepartnr", "tcp", 455); 1587 | 1588 | builder.add("creativepartnr", "udp", 455); 1589 | 1590 | builder.add("macon-tcp", "tcp", 456); 1591 | 1592 | builder.add("macon-udp", "udp", 456); 1593 | 1594 | builder.add("scohelp", "tcp", 457); 1595 | 1596 | builder.add("scohelp", "udp", 457); 1597 | 1598 | builder.add("appleqtc", "tcp", 458); 1599 | 1600 | builder.add("appleqtc", "udp", 458); 1601 | 1602 | builder.add("ampr-rcmd", "tcp", 459); 1603 | 1604 | builder.add("ampr-rcmd", "udp", 459); 1605 | 1606 | builder.add("skronk", "tcp", 460); 1607 | 1608 | builder.add("skronk", "udp", 460); 1609 | 1610 | builder.add("datasurfsrv", "tcp", 461); 1611 | 1612 | builder.add("datasurfsrv", "udp", 461); 1613 | 1614 | builder.add("datasurfsrvsec", "tcp", 462); 1615 | 1616 | builder.add("datasurfsrvsec", "udp", 462); 1617 | 1618 | builder.add("alpes", "tcp", 463); 1619 | 1620 | builder.add("alpes", "udp", 463); 1621 | 1622 | builder.add("kpasswd", "tcp", 464); 1623 | 1624 | builder.add("kpasswd", "udp", 464); 1625 | 1626 | builder.add("urd", "tcp", 465); 1627 | 1628 | builder.add("igmpv3lite", "udp", 465); 1629 | 1630 | builder.add("digital-vrc", "tcp", 466); 1631 | 1632 | builder.add("digital-vrc", "udp", 466); 1633 | 1634 | builder.add("mylex-mapd", "tcp", 467); 1635 | 1636 | builder.add("mylex-mapd", "udp", 467); 1637 | 1638 | builder.add("photuris", "tcp", 468); 1639 | 1640 | builder.add("photuris", "udp", 468); 1641 | 1642 | builder.add("rcp", "tcp", 469); 1643 | 1644 | builder.add("rcp", "udp", 469); 1645 | 1646 | builder.add("scx-proxy", "tcp", 470); 1647 | 1648 | builder.add("scx-proxy", "udp", 470); 1649 | 1650 | builder.add("mondex", "tcp", 471); 1651 | 1652 | builder.add("mondex", "udp", 471); 1653 | 1654 | builder.add("ljk-login", "tcp", 472); 1655 | 1656 | builder.add("ljk-login", "udp", 472); 1657 | 1658 | builder.add("hybrid-pop", "tcp", 473); 1659 | 1660 | builder.add("hybrid-pop", "udp", 473); 1661 | 1662 | builder.add("tn-tl-w1", "tcp", 474); 1663 | 1664 | builder.add("tn-tl-w2", "udp", 474); 1665 | 1666 | builder.add("tcpnethaspsrv", "tcp", 475); 1667 | 1668 | builder.add("tcpnethaspsrv", "udp", 475); 1669 | 1670 | builder.add("tn-tl-fd1", "tcp", 476); 1671 | 1672 | builder.add("tn-tl-fd1", "udp", 476); 1673 | 1674 | builder.add("ss7ns", "tcp", 477); 1675 | 1676 | builder.add("ss7ns", "udp", 477); 1677 | 1678 | builder.add("spsc", "tcp", 478); 1679 | 1680 | builder.add("spsc", "udp", 478); 1681 | 1682 | builder.add("iafserver", "tcp", 479); 1683 | 1684 | builder.add("iafserver", "udp", 479); 1685 | 1686 | builder.add("iafdbase", "tcp", 480); 1687 | 1688 | builder.add("iafdbase", "udp", 480); 1689 | 1690 | builder.add("ph", "tcp", 481); 1691 | 1692 | builder.add("ph", "udp", 481); 1693 | 1694 | builder.add("bgs-nsi", "tcp", 482); 1695 | 1696 | builder.add("bgs-nsi", "udp", 482); 1697 | 1698 | builder.add("ulpnet", "tcp", 483); 1699 | 1700 | builder.add("ulpnet", "udp", 483); 1701 | 1702 | builder.add("integra-sme", "tcp", 484); 1703 | 1704 | builder.add("integra-sme", "udp", 484); 1705 | 1706 | builder.add("powerburst", "tcp", 485); 1707 | 1708 | builder.add("powerburst", "udp", 485); 1709 | 1710 | builder.add("avian", "tcp", 486); 1711 | 1712 | builder.add("avian", "udp", 486); 1713 | 1714 | builder.add("saft", "tcp", 487); 1715 | 1716 | builder.add("saft", "udp", 487); 1717 | 1718 | builder.add("gss-http", "tcp", 488); 1719 | 1720 | builder.add("gss-http", "udp", 488); 1721 | 1722 | builder.add("nest-protocol", "tcp", 489); 1723 | 1724 | builder.add("nest-protocol", "udp", 489); 1725 | 1726 | builder.add("micom-pfs", "tcp", 490); 1727 | 1728 | builder.add("micom-pfs", "udp", 490); 1729 | 1730 | builder.add("go-login", "tcp", 491); 1731 | 1732 | builder.add("go-login", "udp", 491); 1733 | 1734 | builder.add("ticf-1", "tcp", 492); 1735 | 1736 | builder.add("ticf-1", "udp", 492); 1737 | 1738 | builder.add("ticf-2", "tcp", 493); 1739 | 1740 | builder.add("ticf-2", "udp", 493); 1741 | 1742 | builder.add("pov-ray", "tcp", 494); 1743 | 1744 | builder.add("pov-ray", "udp", 494); 1745 | 1746 | builder.add("intecourier", "tcp", 495); 1747 | 1748 | builder.add("intecourier", "udp", 495); 1749 | 1750 | builder.add("pim-rp-disc", "tcp", 496); 1751 | 1752 | builder.add("pim-rp-disc", "udp", 496); 1753 | 1754 | builder.add("dantz", "tcp", 497); 1755 | 1756 | builder.add("dantz", "udp", 497); 1757 | 1758 | builder.add("siam", "tcp", 498); 1759 | 1760 | builder.add("siam", "udp", 498); 1761 | 1762 | builder.add("iso-ill", "tcp", 499); 1763 | 1764 | builder.add("iso-ill", "udp", 499); 1765 | 1766 | builder.add("isakmp", "tcp", 500); 1767 | 1768 | builder.add("isakmp", "udp", 500); 1769 | 1770 | builder.add("stmf", "tcp", 501); 1771 | 1772 | builder.add("stmf", "udp", 501); 1773 | 1774 | builder.add("asa-appl-proto", "tcp", 502); 1775 | 1776 | builder.add("asa-appl-proto", "udp", 502); 1777 | 1778 | builder.add("intrinsa", "tcp", 503); 1779 | 1780 | builder.add("intrinsa", "udp", 503); 1781 | 1782 | builder.add("citadel", "tcp", 504); 1783 | 1784 | builder.add("citadel", "udp", 504); 1785 | 1786 | builder.add("mailbox-lm", "tcp", 505); 1787 | 1788 | builder.add("mailbox-lm", "udp", 505); 1789 | 1790 | builder.add("ohimsrv", "tcp", 506); 1791 | 1792 | builder.add("ohimsrv", "udp", 506); 1793 | 1794 | builder.add("crs", "tcp", 507); 1795 | 1796 | builder.add("crs", "udp", 507); 1797 | 1798 | builder.add("xvttp", "tcp", 508); 1799 | 1800 | builder.add("xvttp", "udp", 508); 1801 | 1802 | builder.add("snare", "tcp", 509); 1803 | 1804 | builder.add("snare", "udp", 509); 1805 | 1806 | builder.add("fcp", "tcp", 510); 1807 | 1808 | builder.add("fcp", "udp", 510); 1809 | 1810 | builder.add("passgo", "tcp", 511); 1811 | 1812 | builder.add("passgo", "udp", 511); 1813 | 1814 | builder.add("exec", "tcp", 512); 1815 | 1816 | builder.add("comsat", "udp", 512); 1817 | 1818 | builder.add("biff", "udp", 512); 1819 | 1820 | builder.add("login", "tcp", 513); 1821 | 1822 | builder.add("who", "udp", 513); 1823 | 1824 | builder.add("shell", "tcp", 514); 1825 | 1826 | builder.add("syslog", "udp", 514); 1827 | 1828 | builder.add("printer", "tcp", 515); 1829 | 1830 | builder.add("printer", "udp", 515); 1831 | 1832 | builder.add("videotex", "tcp", 516); 1833 | 1834 | builder.add("videotex", "udp", 516); 1835 | 1836 | builder.add("talk", "tcp", 517); 1837 | 1838 | builder.add("talk", "udp", 517); 1839 | 1840 | builder.add("ntalk", "tcp", 518); 1841 | 1842 | builder.add("ntalk", "udp", 518); 1843 | 1844 | builder.add("utime", "tcp", 519); 1845 | 1846 | builder.add("utime", "udp", 519); 1847 | 1848 | builder.add("efs", "tcp", 520); 1849 | 1850 | builder.add("router", "udp", 520); 1851 | 1852 | builder.add("ripng", "tcp", 521); 1853 | 1854 | builder.add("ripng", "udp", 521); 1855 | 1856 | builder.add("ulp", "tcp", 522); 1857 | 1858 | builder.add("ulp", "udp", 522); 1859 | 1860 | builder.add("ibm-db2", "tcp", 523); 1861 | 1862 | builder.add("ibm-db2", "udp", 523); 1863 | 1864 | builder.add("ncp", "tcp", 524); 1865 | 1866 | builder.add("ncp", "udp", 524); 1867 | 1868 | builder.add("timed", "tcp", 525); 1869 | 1870 | builder.add("timed", "udp", 525); 1871 | 1872 | builder.add("tempo", "tcp", 526); 1873 | 1874 | builder.add("tempo", "udp", 526); 1875 | 1876 | builder.add("stx", "tcp", 527); 1877 | 1878 | builder.add("stx", "udp", 527); 1879 | 1880 | builder.add("custix", "tcp", 528); 1881 | 1882 | builder.add("custix", "udp", 528); 1883 | 1884 | builder.add("irc-serv", "tcp", 529); 1885 | 1886 | builder.add("irc-serv", "udp", 529); 1887 | 1888 | builder.add("courier", "tcp", 530); 1889 | 1890 | builder.add("courier", "udp", 530); 1891 | 1892 | builder.add("conference", "tcp", 531); 1893 | 1894 | builder.add("conference", "udp", 531); 1895 | 1896 | builder.add("netnews", "tcp", 532); 1897 | 1898 | builder.add("netnews", "udp", 532); 1899 | 1900 | builder.add("netwall", "tcp", 533); 1901 | 1902 | builder.add("netwall", "udp", 533); 1903 | 1904 | builder.add("windream", "tcp", 534); 1905 | 1906 | builder.add("windream", "udp", 534); 1907 | 1908 | builder.add("iiop", "tcp", 535); 1909 | 1910 | builder.add("iiop", "udp", 535); 1911 | 1912 | builder.add("opalis-rdv", "tcp", 536); 1913 | 1914 | builder.add("opalis-rdv", "udp", 536); 1915 | 1916 | builder.add("nmsp", "tcp", 537); 1917 | 1918 | builder.add("nmsp", "udp", 537); 1919 | 1920 | builder.add("gdomap", "tcp", 538); 1921 | 1922 | builder.add("gdomap", "udp", 538); 1923 | 1924 | builder.add("apertus-ldp", "tcp", 539); 1925 | 1926 | builder.add("apertus-ldp", "udp", 539); 1927 | 1928 | builder.add("uucp", "tcp", 540); 1929 | 1930 | builder.add("uucp", "udp", 540); 1931 | 1932 | builder.add("uucp-rlogin", "tcp", 541); 1933 | 1934 | builder.add("uucp-rlogin", "udp", 541); 1935 | 1936 | builder.add("commerce", "tcp", 542); 1937 | 1938 | builder.add("commerce", "udp", 542); 1939 | 1940 | builder.add("klogin", "tcp", 543); 1941 | 1942 | builder.add("klogin", "udp", 543); 1943 | 1944 | builder.add("kshell", "tcp", 544); 1945 | 1946 | builder.add("kshell", "udp", 544); 1947 | 1948 | builder.add("appleqtcsrvr", "tcp", 545); 1949 | 1950 | builder.add("appleqtcsrvr", "udp", 545); 1951 | 1952 | builder.add("dhcpv6-client", "tcp", 546); 1953 | 1954 | builder.add("dhcpv6-client", "udp", 546); 1955 | 1956 | builder.add("dhcpv6-server", "tcp", 547); 1957 | 1958 | builder.add("dhcpv6-server", "udp", 547); 1959 | 1960 | builder.add("afpovertcp", "tcp", 548); 1961 | 1962 | builder.add("afpovertcp", "udp", 548); 1963 | 1964 | builder.add("idfp", "tcp", 549); 1965 | 1966 | builder.add("idfp", "udp", 549); 1967 | 1968 | builder.add("new-rwho", "tcp", 550); 1969 | 1970 | builder.add("new-rwho", "udp", 550); 1971 | 1972 | builder.add("cybercash", "tcp", 551); 1973 | 1974 | builder.add("cybercash", "udp", 551); 1975 | 1976 | builder.add("devshr-nts", "tcp", 552); 1977 | 1978 | builder.add("devshr-nts", "udp", 552); 1979 | 1980 | builder.add("pirp", "tcp", 553); 1981 | 1982 | builder.add("pirp", "udp", 553); 1983 | 1984 | builder.add("rtsp", "tcp", 554); 1985 | 1986 | builder.add("rtsp", "udp", 554); 1987 | 1988 | builder.add("dsf", "tcp", 555); 1989 | 1990 | builder.add("dsf", "udp", 555); 1991 | 1992 | builder.add("remotefs", "tcp", 556); 1993 | 1994 | builder.add("remotefs", "udp", 556); 1995 | 1996 | builder.add("openvms-sysipc", "tcp", 557); 1997 | 1998 | builder.add("openvms-sysipc", "udp", 557); 1999 | 2000 | builder.add("sdnskmp", "tcp", 558); 2001 | 2002 | builder.add("sdnskmp", "udp", 558); 2003 | 2004 | builder.add("teedtap", "tcp", 559); 2005 | 2006 | builder.add("teedtap", "udp", 559); 2007 | 2008 | builder.add("rmonitor", "tcp", 560); 2009 | 2010 | builder.add("rmonitor", "udp", 560); 2011 | 2012 | builder.add("monitor", "tcp", 561); 2013 | 2014 | builder.add("monitor", "udp", 561); 2015 | 2016 | builder.add("chshell", "tcp", 562); 2017 | 2018 | builder.add("chshell", "udp", 562); 2019 | 2020 | builder.add("nntps", "tcp", 563); 2021 | 2022 | builder.add("nntps", "udp", 563); 2023 | 2024 | builder.add("9pfs", "tcp", 564); 2025 | 2026 | builder.add("9pfs", "udp", 564); 2027 | 2028 | builder.add("whoami", "tcp", 565); 2029 | 2030 | builder.add("whoami", "udp", 565); 2031 | 2032 | builder.add("streettalk", "tcp", 566); 2033 | 2034 | builder.add("streettalk", "udp", 566); 2035 | 2036 | builder.add("banyan-rpc", "tcp", 567); 2037 | 2038 | builder.add("banyan-rpc", "udp", 567); 2039 | 2040 | builder.add("ms-shuttle", "tcp", 568); 2041 | 2042 | builder.add("ms-shuttle", "udp", 568); 2043 | 2044 | builder.add("ms-rome", "tcp", 569); 2045 | 2046 | builder.add("ms-rome", "udp", 569); 2047 | 2048 | builder.add("meter", "tcp", 570); 2049 | 2050 | builder.add("meter", "udp", 570); 2051 | 2052 | builder.add("meter", "tcp", 571); 2053 | 2054 | builder.add("meter", "udp", 571); 2055 | 2056 | builder.add("sonar", "tcp", 572); 2057 | 2058 | builder.add("sonar", "udp", 572); 2059 | 2060 | builder.add("banyan-vip", "tcp", 573); 2061 | 2062 | builder.add("banyan-vip", "udp", 573); 2063 | 2064 | builder.add("ftp-agent", "tcp", 574); 2065 | 2066 | builder.add("ftp-agent", "udp", 574); 2067 | 2068 | builder.add("vemmi", "tcp", 575); 2069 | 2070 | builder.add("vemmi", "udp", 575); 2071 | 2072 | builder.add("ipcd", "tcp", 576); 2073 | 2074 | builder.add("ipcd", "udp", 576); 2075 | 2076 | builder.add("vnas", "tcp", 577); 2077 | 2078 | builder.add("vnas", "udp", 577); 2079 | 2080 | builder.add("ipdd", "tcp", 578); 2081 | 2082 | builder.add("ipdd", "udp", 578); 2083 | 2084 | builder.add("decbsrv", "tcp", 579); 2085 | 2086 | builder.add("decbsrv", "udp", 579); 2087 | 2088 | builder.add("sntp-heartbeat", "tcp", 580); 2089 | 2090 | builder.add("sntp-heartbeat", "udp", 580); 2091 | 2092 | builder.add("bdp", "tcp", 581); 2093 | 2094 | builder.add("bdp", "udp", 581); 2095 | 2096 | builder.add("scc-security", "tcp", 582); 2097 | 2098 | builder.add("scc-security", "udp", 582); 2099 | 2100 | builder.add("philips-vc", "tcp", 583); 2101 | 2102 | builder.add("philips-vc", "udp", 583); 2103 | 2104 | builder.add("keyserver", "tcp", 584); 2105 | 2106 | builder.add("keyserver", "udp", 584); 2107 | 2108 | builder.add("password-chg", "tcp", 586); 2109 | 2110 | builder.add("password-chg", "udp", 586); 2111 | 2112 | builder.add("submission", "tcp", 587); 2113 | 2114 | builder.add("submission", "udp", 587); 2115 | 2116 | builder.add("cal", "tcp", 588); 2117 | 2118 | builder.add("cal", "udp", 588); 2119 | 2120 | builder.add("eyelink", "tcp", 589); 2121 | 2122 | builder.add("eyelink", "udp", 589); 2123 | 2124 | builder.add("tns-cml", "tcp", 590); 2125 | 2126 | builder.add("tns-cml", "udp", 590); 2127 | 2128 | builder.add("http-alt", "tcp", 591); 2129 | 2130 | builder.add("http-alt", "udp", 591); 2131 | 2132 | builder.add("eudora-set", "tcp", 592); 2133 | 2134 | builder.add("eudora-set", "udp", 592); 2135 | 2136 | builder.add("http-rpc-epmap", "tcp", 593); 2137 | 2138 | builder.add("http-rpc-epmap", "udp", 593); 2139 | 2140 | builder.add("tpip", "tcp", 594); 2141 | 2142 | builder.add("tpip", "udp", 594); 2143 | 2144 | builder.add("cab-protocol", "tcp", 595); 2145 | 2146 | builder.add("cab-protocol", "udp", 595); 2147 | 2148 | builder.add("smsd", "tcp", 596); 2149 | 2150 | builder.add("smsd", "udp", 596); 2151 | 2152 | builder.add("ptcnameservice", "tcp", 597); 2153 | 2154 | builder.add("ptcnameservice", "udp", 597); 2155 | 2156 | builder.add("sco-websrvrmg3", "tcp", 598); 2157 | 2158 | builder.add("sco-websrvrmg3", "udp", 598); 2159 | 2160 | builder.add("acp", "tcp", 599); 2161 | 2162 | builder.add("acp", "udp", 599); 2163 | 2164 | builder.add("ipcserver", "tcp", 600); 2165 | 2166 | builder.add("ipcserver", "udp", 600); 2167 | 2168 | builder.add("syslog-conn", "tcp", 601); 2169 | 2170 | builder.add("syslog-conn", "udp", 601); 2171 | 2172 | builder.add("xmlrpc-beep", "tcp", 602); 2173 | 2174 | builder.add("xmlrpc-beep", "udp", 602); 2175 | 2176 | builder.add("idxp", "tcp", 603); 2177 | 2178 | builder.add("idxp", "udp", 603); 2179 | 2180 | builder.add("tunnel", "tcp", 604); 2181 | 2182 | builder.add("tunnel", "udp", 604); 2183 | 2184 | builder.add("soap-beep", "tcp", 605); 2185 | 2186 | builder.add("soap-beep", "udp", 605); 2187 | 2188 | builder.add("urm", "tcp", 606); 2189 | 2190 | builder.add("urm", "udp", 606); 2191 | 2192 | builder.add("nqs", "tcp", 607); 2193 | 2194 | builder.add("nqs", "udp", 607); 2195 | 2196 | builder.add("sift-uft", "tcp", 608); 2197 | 2198 | builder.add("sift-uft", "udp", 608); 2199 | 2200 | builder.add("npmp-trap", "tcp", 609); 2201 | 2202 | builder.add("npmp-trap", "udp", 609); 2203 | 2204 | builder.add("npmp-local", "tcp", 610); 2205 | 2206 | builder.add("npmp-local", "udp", 610); 2207 | 2208 | builder.add("npmp-gui", "tcp", 611); 2209 | 2210 | builder.add("npmp-gui", "udp", 611); 2211 | 2212 | builder.add("hmmp-ind", "tcp", 612); 2213 | 2214 | builder.add("hmmp-ind", "udp", 612); 2215 | 2216 | builder.add("hmmp-op", "tcp", 613); 2217 | 2218 | builder.add("hmmp-op", "udp", 613); 2219 | 2220 | builder.add("sshell", "tcp", 614); 2221 | 2222 | builder.add("sshell", "udp", 614); 2223 | 2224 | builder.add("sco-inetmgr", "tcp", 615); 2225 | 2226 | builder.add("sco-inetmgr", "udp", 615); 2227 | 2228 | builder.add("sco-sysmgr", "tcp", 616); 2229 | 2230 | builder.add("sco-sysmgr", "udp", 616); 2231 | 2232 | builder.add("sco-dtmgr", "tcp", 617); 2233 | 2234 | builder.add("sco-dtmgr", "udp", 617); 2235 | 2236 | builder.add("dei-icda", "tcp", 618); 2237 | 2238 | builder.add("dei-icda", "udp", 618); 2239 | 2240 | builder.add("compaq-evm", "tcp", 619); 2241 | 2242 | builder.add("compaq-evm", "udp", 619); 2243 | 2244 | builder.add("sco-websrvrmgr", "tcp", 620); 2245 | 2246 | builder.add("sco-websrvrmgr", "udp", 620); 2247 | 2248 | builder.add("escp-ip", "tcp", 621); 2249 | 2250 | builder.add("escp-ip", "udp", 621); 2251 | 2252 | builder.add("collaborator", "tcp", 622); 2253 | 2254 | builder.add("collaborator", "udp", 622); 2255 | 2256 | builder.add("oob-ws-http", "tcp", 623); 2257 | 2258 | builder.add("asf-rmcp", "udp", 623); 2259 | 2260 | builder.add("cryptoadmin", "tcp", 624); 2261 | 2262 | builder.add("cryptoadmin", "udp", 624); 2263 | 2264 | builder.add("dec_dlm", "tcp", 625); 2265 | 2266 | builder.add("dec_dlm", "udp", 625); 2267 | 2268 | builder.add("asia", "tcp", 626); 2269 | 2270 | builder.add("asia", "udp", 626); 2271 | 2272 | builder.add("passgo-tivoli", "tcp", 627); 2273 | 2274 | builder.add("passgo-tivoli", "udp", 627); 2275 | 2276 | builder.add("qmqp", "tcp", 628); 2277 | 2278 | builder.add("qmqp", "udp", 628); 2279 | 2280 | builder.add("3com-amp3", "tcp", 629); 2281 | 2282 | builder.add("3com-amp3", "udp", 629); 2283 | 2284 | builder.add("rda", "tcp", 630); 2285 | 2286 | builder.add("rda", "udp", 630); 2287 | 2288 | builder.add("ipp", "tcp", 631); 2289 | 2290 | builder.add("ipp", "udp", 631); 2291 | 2292 | builder.add("bmpp", "tcp", 632); 2293 | 2294 | builder.add("bmpp", "udp", 632); 2295 | 2296 | builder.add("servstat", "tcp", 633); 2297 | 2298 | builder.add("servstat", "udp", 633); 2299 | 2300 | builder.add("ginad", "tcp", 634); 2301 | 2302 | builder.add("ginad", "udp", 634); 2303 | 2304 | builder.add("rlzdbase", "tcp", 635); 2305 | 2306 | builder.add("rlzdbase", "udp", 635); 2307 | 2308 | builder.add("ldaps", "tcp", 636); 2309 | 2310 | builder.add("ldaps", "udp", 636); 2311 | 2312 | builder.add("lanserver", "tcp", 637); 2313 | 2314 | builder.add("lanserver", "udp", 637); 2315 | 2316 | builder.add("mcns-sec", "tcp", 638); 2317 | 2318 | builder.add("mcns-sec", "udp", 638); 2319 | 2320 | builder.add("msdp", "tcp", 639); 2321 | 2322 | builder.add("msdp", "udp", 639); 2323 | 2324 | builder.add("entrust-sps", "tcp", 640); 2325 | 2326 | builder.add("entrust-sps", "udp", 640); 2327 | 2328 | builder.add("repcmd", "tcp", 641); 2329 | 2330 | builder.add("repcmd", "udp", 641); 2331 | 2332 | builder.add("esro-emsdp", "tcp", 642); 2333 | 2334 | builder.add("esro-emsdp", "udp", 642); 2335 | 2336 | builder.add("sanity", "tcp", 643); 2337 | 2338 | builder.add("sanity", "udp", 643); 2339 | 2340 | builder.add("dwr", "tcp", 644); 2341 | 2342 | builder.add("dwr", "udp", 644); 2343 | 2344 | builder.add("pssc", "tcp", 645); 2345 | 2346 | builder.add("pssc", "udp", 645); 2347 | 2348 | builder.add("ldp", "tcp", 646); 2349 | 2350 | builder.add("ldp", "udp", 646); 2351 | 2352 | builder.add("dhcp-failover", "tcp", 647); 2353 | 2354 | builder.add("dhcp-failover", "udp", 647); 2355 | 2356 | builder.add("rrp", "tcp", 648); 2357 | 2358 | builder.add("rrp", "udp", 648); 2359 | 2360 | builder.add("cadview-3d", "tcp", 649); 2361 | 2362 | builder.add("cadview-3d", "udp", 649); 2363 | 2364 | builder.add("obex", "tcp", 650); 2365 | 2366 | builder.add("obex", "udp", 650); 2367 | 2368 | builder.add("ieee-mms", "tcp", 651); 2369 | 2370 | builder.add("ieee-mms", "udp", 651); 2371 | 2372 | builder.add("hello-port", "tcp", 652); 2373 | 2374 | builder.add("hello-port", "udp", 652); 2375 | 2376 | builder.add("repscmd", "tcp", 653); 2377 | 2378 | builder.add("repscmd", "udp", 653); 2379 | 2380 | builder.add("aodv", "tcp", 654); 2381 | 2382 | builder.add("aodv", "udp", 654); 2383 | 2384 | builder.add("tinc", "tcp", 655); 2385 | 2386 | builder.add("tinc", "udp", 655); 2387 | 2388 | builder.add("spmp", "tcp", 656); 2389 | 2390 | builder.add("spmp", "udp", 656); 2391 | 2392 | builder.add("rmc", "tcp", 657); 2393 | 2394 | builder.add("rmc", "udp", 657); 2395 | 2396 | builder.add("tenfold", "tcp", 658); 2397 | 2398 | builder.add("tenfold", "udp", 658); 2399 | 2400 | builder.add("mac-srvr-admin", "tcp", 660); 2401 | 2402 | builder.add("mac-srvr-admin", "udp", 660); 2403 | 2404 | builder.add("hap", "tcp", 661); 2405 | 2406 | builder.add("hap", "udp", 661); 2407 | 2408 | builder.add("pftp", "tcp", 662); 2409 | 2410 | builder.add("pftp", "udp", 662); 2411 | 2412 | builder.add("purenoise", "tcp", 663); 2413 | 2414 | builder.add("purenoise", "udp", 663); 2415 | 2416 | builder.add("oob-ws-https", "tcp", 664); 2417 | 2418 | builder.add("asf-secure-rmcp", "udp", 664); 2419 | 2420 | builder.add("sun-dr", "tcp", 665); 2421 | 2422 | builder.add("sun-dr", "udp", 665); 2423 | 2424 | builder.add("mdqs", "tcp", 666); 2425 | 2426 | builder.add("mdqs", "udp", 666); 2427 | 2428 | builder.add("doom", "tcp", 666); 2429 | 2430 | builder.add("doom", "udp", 666); 2431 | 2432 | builder.add("disclose", "tcp", 667); 2433 | 2434 | builder.add("disclose", "udp", 667); 2435 | 2436 | builder.add("mecomm", "tcp", 668); 2437 | 2438 | builder.add("mecomm", "udp", 668); 2439 | 2440 | builder.add("meregister", "tcp", 669); 2441 | 2442 | builder.add("meregister", "udp", 669); 2443 | 2444 | builder.add("vacdsm-sws", "tcp", 670); 2445 | 2446 | builder.add("vacdsm-sws", "udp", 670); 2447 | 2448 | builder.add("vacdsm-app", "tcp", 671); 2449 | 2450 | builder.add("vacdsm-app", "udp", 671); 2451 | 2452 | builder.add("vpps-qua", "tcp", 672); 2453 | 2454 | builder.add("vpps-qua", "udp", 672); 2455 | 2456 | builder.add("cimplex", "tcp", 673); 2457 | 2458 | builder.add("cimplex", "udp", 673); 2459 | 2460 | builder.add("acap", "tcp", 674); 2461 | 2462 | builder.add("acap", "udp", 674); 2463 | 2464 | builder.add("dctp", "tcp", 675); 2465 | 2466 | builder.add("dctp", "udp", 675); 2467 | 2468 | builder.add("vpps-via", "tcp", 676); 2469 | 2470 | builder.add("vpps-via", "udp", 676); 2471 | 2472 | builder.add("vpp", "tcp", 677); 2473 | 2474 | builder.add("vpp", "udp", 677); 2475 | 2476 | builder.add("ggf-ncp", "tcp", 678); 2477 | 2478 | builder.add("ggf-ncp", "udp", 678); 2479 | 2480 | builder.add("mrm", "tcp", 679); 2481 | 2482 | builder.add("mrm", "udp", 679); 2483 | 2484 | builder.add("entrust-aaas", "tcp", 680); 2485 | 2486 | builder.add("entrust-aaas", "udp", 680); 2487 | 2488 | builder.add("entrust-aams", "tcp", 681); 2489 | 2490 | builder.add("entrust-aams", "udp", 681); 2491 | 2492 | builder.add("xfr", "tcp", 682); 2493 | 2494 | builder.add("xfr", "udp", 682); 2495 | 2496 | builder.add("corba-iiop", "tcp", 683); 2497 | 2498 | builder.add("corba-iiop", "udp", 683); 2499 | 2500 | builder.add("corba-iiop-ssl", "tcp", 684); 2501 | 2502 | builder.add("corba-iiop-ssl", "udp", 684); 2503 | 2504 | builder.add("mdc-portmapper", "tcp", 685); 2505 | 2506 | builder.add("mdc-portmapper", "udp", 685); 2507 | 2508 | builder.add("hcp-wismar", "tcp", 686); 2509 | 2510 | builder.add("hcp-wismar", "udp", 686); 2511 | 2512 | builder.add("asipregistry", "tcp", 687); 2513 | 2514 | builder.add("asipregistry", "udp", 687); 2515 | 2516 | builder.add("realm-rusd", "tcp", 688); 2517 | 2518 | builder.add("realm-rusd", "udp", 688); 2519 | 2520 | builder.add("nmap", "tcp", 689); 2521 | 2522 | builder.add("nmap", "udp", 689); 2523 | 2524 | builder.add("vatp", "tcp", 690); 2525 | 2526 | builder.add("vatp", "udp", 690); 2527 | 2528 | builder.add("msexch-routing", "tcp", 691); 2529 | 2530 | builder.add("msexch-routing", "udp", 691); 2531 | 2532 | builder.add("hyperwave-isp", "tcp", 692); 2533 | 2534 | builder.add("hyperwave-isp", "udp", 692); 2535 | 2536 | builder.add("connendp", "tcp", 693); 2537 | 2538 | builder.add("connendp", "udp", 693); 2539 | 2540 | builder.add("ha-cluster", "tcp", 694); 2541 | 2542 | builder.add("ha-cluster", "udp", 694); 2543 | 2544 | builder.add("ieee-mms-ssl", "tcp", 695); 2545 | 2546 | builder.add("ieee-mms-ssl", "udp", 695); 2547 | 2548 | builder.add("rushd", "tcp", 696); 2549 | 2550 | builder.add("rushd", "udp", 696); 2551 | 2552 | builder.add("uuidgen", "tcp", 697); 2553 | 2554 | builder.add("uuidgen", "udp", 697); 2555 | 2556 | builder.add("olsr", "tcp", 698); 2557 | 2558 | builder.add("olsr", "udp", 698); 2559 | 2560 | builder.add("accessnetwork", "tcp", 699); 2561 | 2562 | builder.add("accessnetwork", "udp", 699); 2563 | 2564 | builder.add("epp", "tcp", 700); 2565 | 2566 | builder.add("epp", "udp", 700); 2567 | 2568 | builder.add("lmp", "tcp", 701); 2569 | 2570 | builder.add("lmp", "udp", 701); 2571 | 2572 | builder.add("iris-beep", "tcp", 702); 2573 | 2574 | builder.add("iris-beep", "udp", 702); 2575 | 2576 | builder.add("elcsd", "tcp", 704); 2577 | 2578 | builder.add("elcsd", "udp", 704); 2579 | 2580 | builder.add("agentx", "tcp", 705); 2581 | 2582 | builder.add("agentx", "udp", 705); 2583 | 2584 | builder.add("silc", "tcp", 706); 2585 | 2586 | builder.add("silc", "udp", 706); 2587 | 2588 | builder.add("borland-dsj", "tcp", 707); 2589 | 2590 | builder.add("borland-dsj", "udp", 707); 2591 | 2592 | builder.add("entrust-kmsh", "tcp", 709); 2593 | 2594 | builder.add("entrust-kmsh", "udp", 709); 2595 | 2596 | builder.add("entrust-ash", "tcp", 710); 2597 | 2598 | builder.add("entrust-ash", "udp", 710); 2599 | 2600 | builder.add("cisco-tdp", "tcp", 711); 2601 | 2602 | builder.add("cisco-tdp", "udp", 711); 2603 | 2604 | builder.add("tbrpf", "tcp", 712); 2605 | 2606 | builder.add("tbrpf", "udp", 712); 2607 | 2608 | builder.add("iris-xpc", "tcp", 713); 2609 | 2610 | builder.add("iris-xpc", "udp", 713); 2611 | 2612 | builder.add("iris-xpcs", "tcp", 714); 2613 | 2614 | builder.add("iris-xpcs", "udp", 714); 2615 | 2616 | builder.add("iris-lwz", "tcp", 715); 2617 | 2618 | builder.add("iris-lwz", "udp", 715); 2619 | 2620 | builder.add("pana", "udp", 716); 2621 | 2622 | builder.add("netviewdm1", "tcp", 729); 2623 | 2624 | builder.add("netviewdm1", "udp", 729); 2625 | 2626 | builder.add("netviewdm2", "tcp", 730); 2627 | 2628 | builder.add("netviewdm2", "udp", 730); 2629 | 2630 | builder.add("netviewdm3", "tcp", 731); 2631 | 2632 | builder.add("netviewdm3", "udp", 731); 2633 | 2634 | builder.add("netgw", "tcp", 741); 2635 | 2636 | builder.add("netgw", "udp", 741); 2637 | 2638 | builder.add("netrcs", "tcp", 742); 2639 | 2640 | builder.add("netrcs", "udp", 742); 2641 | 2642 | builder.add("flexlm", "tcp", 744); 2643 | 2644 | builder.add("flexlm", "udp", 744); 2645 | 2646 | builder.add("fujitsu-dev", "tcp", 747); 2647 | 2648 | builder.add("fujitsu-dev", "udp", 747); 2649 | 2650 | builder.add("ris-cm", "tcp", 748); 2651 | 2652 | builder.add("ris-cm", "udp", 748); 2653 | 2654 | builder.add("kerberos-adm", "tcp", 749); 2655 | 2656 | builder.add("kerberos-adm", "udp", 749); 2657 | 2658 | builder.add("rfile", "tcp", 750); 2659 | 2660 | builder.add("loadav", "udp", 750); 2661 | 2662 | builder.add("kerberos-iv", "udp", 750); 2663 | 2664 | builder.add("pump", "tcp", 751); 2665 | 2666 | builder.add("pump", "udp", 751); 2667 | 2668 | builder.add("qrh", "tcp", 752); 2669 | 2670 | builder.add("qrh", "udp", 752); 2671 | 2672 | builder.add("rrh", "tcp", 753); 2673 | 2674 | builder.add("rrh", "udp", 753); 2675 | 2676 | builder.add("tell", "tcp", 754); 2677 | 2678 | builder.add("tell", "udp", 754); 2679 | 2680 | builder.add("nlogin", "tcp", 758); 2681 | 2682 | builder.add("nlogin", "udp", 758); 2683 | 2684 | builder.add("con", "tcp", 759); 2685 | 2686 | builder.add("con", "udp", 759); 2687 | 2688 | builder.add("ns", "tcp", 760); 2689 | 2690 | builder.add("ns", "udp", 760); 2691 | 2692 | builder.add("rxe", "tcp", 761); 2693 | 2694 | builder.add("rxe", "udp", 761); 2695 | 2696 | builder.add("quotad", "tcp", 762); 2697 | 2698 | builder.add("quotad", "udp", 762); 2699 | 2700 | builder.add("cycleserv", "tcp", 763); 2701 | 2702 | builder.add("cycleserv", "udp", 763); 2703 | 2704 | builder.add("omserv", "tcp", 764); 2705 | 2706 | builder.add("omserv", "udp", 764); 2707 | 2708 | builder.add("webster", "tcp", 765); 2709 | 2710 | builder.add("webster", "udp", 765); 2711 | 2712 | builder.add("phonebook", "tcp", 767); 2713 | 2714 | builder.add("phonebook", "udp", 767); 2715 | 2716 | builder.add("vid", "tcp", 769); 2717 | 2718 | builder.add("vid", "udp", 769); 2719 | 2720 | builder.add("cadlock", "tcp", 770); 2721 | 2722 | builder.add("cadlock", "udp", 770); 2723 | 2724 | builder.add("rtip", "tcp", 771); 2725 | 2726 | builder.add("rtip", "udp", 771); 2727 | 2728 | builder.add("cycleserv2", "tcp", 772); 2729 | 2730 | builder.add("cycleserv2", "udp", 772); 2731 | 2732 | builder.add("submit", "tcp", 773); 2733 | 2734 | builder.add("notify", "udp", 773); 2735 | 2736 | builder.add("rpasswd", "tcp", 774); 2737 | 2738 | builder.add("acmaint_dbd", "udp", 774); 2739 | 2740 | builder.add("entomb", "tcp", 775); 2741 | 2742 | builder.add("acmaint_transd", "udp", 775); 2743 | 2744 | builder.add("wpages", "tcp", 776); 2745 | 2746 | builder.add("wpages", "udp", 776); 2747 | 2748 | builder.add("multiling-http", "tcp", 777); 2749 | 2750 | builder.add("multiling-http", "udp", 777); 2751 | 2752 | builder.add("wpgs", "tcp", 780); 2753 | 2754 | builder.add("wpgs", "udp", 780); 2755 | 2756 | builder.add("mdbs_daemon", "tcp", 800); 2757 | 2758 | builder.add("mdbs_daemon", "udp", 800); 2759 | 2760 | builder.add("device", "tcp", 801); 2761 | 2762 | builder.add("device", "udp", 801); 2763 | 2764 | builder.add("fcp-udp", "tcp", 810); 2765 | 2766 | builder.add("fcp-udp", "udp", 810); 2767 | 2768 | builder.add("itm-mcell-s", "tcp", 828); 2769 | 2770 | builder.add("itm-mcell-s", "udp", 828); 2771 | 2772 | builder.add("pkix-3-ca-ra", "tcp", 829); 2773 | 2774 | builder.add("pkix-3-ca-ra", "udp", 829); 2775 | 2776 | builder.add("netconf-ssh", "tcp", 830); 2777 | 2778 | builder.add("netconf-ssh", "udp", 830); 2779 | 2780 | builder.add("netconf-beep", "tcp", 831); 2781 | 2782 | builder.add("netconf-beep", "udp", 831); 2783 | 2784 | builder.add("netconfsoaphttp", "tcp", 832); 2785 | 2786 | builder.add("netconfsoaphttp", "udp", 832); 2787 | 2788 | builder.add("netconfsoapbeep", "tcp", 833); 2789 | 2790 | builder.add("netconfsoapbeep", "udp", 833); 2791 | 2792 | builder.add("dhcp-failover2", "tcp", 847); 2793 | 2794 | builder.add("dhcp-failover2", "udp", 847); 2795 | 2796 | builder.add("gdoi", "tcp", 848); 2797 | 2798 | builder.add("gdoi", "udp", 848); 2799 | 2800 | builder.add("iscsi", "tcp", 860); 2801 | 2802 | builder.add("iscsi", "udp", 860); 2803 | 2804 | builder.add("owamp-control", "tcp", 861); 2805 | 2806 | builder.add("owamp-control", "udp", 861); 2807 | 2808 | builder.add("rsync", "tcp", 873); 2809 | 2810 | builder.add("rsync", "udp", 873); 2811 | 2812 | builder.add("iclcnet-locate", "tcp", 886); 2813 | 2814 | builder.add("iclcnet-locate", "udp", 886); 2815 | 2816 | builder.add("iclcnet_svinfo", "tcp", 887); 2817 | 2818 | builder.add("iclcnet_svinfo", "udp", 887); 2819 | 2820 | builder.add("accessbuilder", "tcp", 888); 2821 | 2822 | builder.add("accessbuilder", "udp", 888); 2823 | 2824 | builder.add("cddbp", "tcp", 888); 2825 | 2826 | builder.add("omginitialrefs", "tcp", 900); 2827 | 2828 | builder.add("omginitialrefs", "udp", 900); 2829 | 2830 | builder.add("smpnameres", "tcp", 901); 2831 | 2832 | builder.add("smpnameres", "udp", 901); 2833 | 2834 | builder.add("ideafarm-door", "tcp", 902); 2835 | 2836 | builder.add("ideafarm-door", "udp", 902); 2837 | 2838 | builder.add("ideafarm-panic", "tcp", 903); 2839 | 2840 | builder.add("ideafarm-panic", "udp", 903); 2841 | 2842 | builder.add("kink", "tcp", 910); 2843 | 2844 | builder.add("kink", "udp", 910); 2845 | 2846 | builder.add("xact-backup", "tcp", 911); 2847 | 2848 | builder.add("xact-backup", "udp", 911); 2849 | 2850 | builder.add("apex-mesh", "tcp", 912); 2851 | 2852 | builder.add("apex-mesh", "udp", 912); 2853 | 2854 | builder.add("apex-edge", "tcp", 913); 2855 | 2856 | builder.add("apex-edge", "udp", 913); 2857 | 2858 | builder.add("ftps-data", "tcp", 989); 2859 | 2860 | builder.add("ftps-data", "udp", 989); 2861 | 2862 | builder.add("ftps", "tcp", 990); 2863 | 2864 | builder.add("ftps", "udp", 990); 2865 | 2866 | builder.add("nas", "tcp", 991); 2867 | 2868 | builder.add("nas", "udp", 991); 2869 | 2870 | builder.add("telnets", "tcp", 992); 2871 | 2872 | builder.add("telnets", "udp", 992); 2873 | 2874 | builder.add("imaps", "tcp", 993); 2875 | 2876 | builder.add("imaps", "udp", 993); 2877 | 2878 | builder.add("ircs", "tcp", 994); 2879 | 2880 | builder.add("ircs", "udp", 994); 2881 | 2882 | builder.add("pop3s", "tcp", 995); 2883 | 2884 | builder.add("pop3s", "udp", 995); 2885 | 2886 | builder.add("vsinet", "tcp", 996); 2887 | 2888 | builder.add("vsinet", "udp", 996); 2889 | 2890 | builder.add("maitrd", "tcp", 997); 2891 | 2892 | builder.add("maitrd", "udp", 997); 2893 | 2894 | builder.add("busboy", "tcp", 998); 2895 | 2896 | builder.add("puparp", "udp", 998); 2897 | 2898 | builder.add("garcon", "tcp", 999); 2899 | 2900 | builder.add("applix", "udp", 999); 2901 | 2902 | builder.add("puprouter", "tcp", 999); 2903 | 2904 | builder.add("puprouter", "udp", 999); 2905 | 2906 | builder.add("cadlock2", "tcp", 1000); 2907 | 2908 | builder.add("cadlock2", "udp", 1000); 2909 | 2910 | builder.add("surf", "tcp", 1010); 2911 | 2912 | builder.add("surf", "udp", 1010); 2913 | 2914 | builder.add("exp1", "tcp", 1021); 2915 | 2916 | builder.add("exp1", "udp", 1021); 2917 | 2918 | builder.add("exp2", "tcp", 1022); 2919 | 2920 | builder.add("exp2", "udp", 1022); 2921 | 2922 | 2923 | return builder.build(); 2924 | } 2925 | } 2926 | -------------------------------------------------------------------------------- /src/main/java/jnr/netdb/NativeProtocolsDB.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2010 Wayne Meissner 3 | * 4 | * This file is part of jnr. 5 | * 6 | * Licensed under the Apache License, Version 2.0 (the "License"); 7 | * you may not use this file except in compliance with the License. 8 | * You may obtain a copy of the License at 9 | * 10 | * http://www.apache.org/licenses/LICENSE-2.0 11 | * 12 | * Unless required by applicable law or agreed to in writing, software 13 | * distributed under the License is distributed on an "AS IS" BASIS, 14 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 15 | * See the License for the specific language governing permissions and 16 | * limitations under the License. 17 | */ 18 | 19 | package jnr.netdb; 20 | 21 | import jnr.ffi.*; 22 | import jnr.ffi.Runtime; 23 | import jnr.ffi.annotations.Direct; 24 | 25 | import java.util.ArrayList; 26 | 27 | import java.util.Collection; 28 | import java.util.Collections; 29 | import java.util.HashMap; 30 | import java.util.List; 31 | import java.util.Map; 32 | import java.util.logging.Level; 33 | import java.util.logging.Logger; 34 | 35 | import static jnr.ffi.Platform.OS.*; 36 | 37 | /** 38 | * 39 | */ 40 | abstract class NativeProtocolsDB implements ProtocolsDB { 41 | 42 | public static final NativeProtocolsDB getInstance() { 43 | return SingletonHolder.INSTANCE; 44 | } 45 | 46 | private static final class SingletonHolder { 47 | public static final NativeProtocolsDB INSTANCE = load(); 48 | } 49 | 50 | private static final NativeProtocolsDB load() { 51 | try { 52 | Platform.OS os = Platform.getNativePlatform().getOS(); 53 | 54 | // The protoent struct is only known to match on Windows, MacOSX, Linux, Solaris. 55 | // We assume FreeBSD and NetBSD also match. 56 | if (!(os.equals(DARWIN) || (os.equals(WINDOWS) && Platform.getNativePlatform().getCPU() == Platform.CPU.I386) 57 | || os.equals(LINUX) || os.equals(SOLARIS) 58 | || os.equals(FREEBSD) || os.equals(NETBSD))) { 59 | return null; 60 | } 61 | 62 | LibProto lib; 63 | if (os.equals(WINDOWS)) { 64 | Map options = new HashMap(); 65 | options.put(LibraryOption.CallingConvention, CallingConvention.STDCALL); 66 | lib = Library.loadLibrary(LibProto.class, options, "Ws2_32"); 67 | } else { 68 | String[] libnames = os.equals(SOLARIS) 69 | ? new String[]{"socket", "nsl", "c"} 70 | : new String[]{"c"}; 71 | lib = os.equals(LINUX) 72 | ? Library.loadLibrary(LinuxLibProto.class, libnames) 73 | : Library.loadLibrary(LibProto.class, libnames); 74 | } 75 | 76 | NativeProtocolsDB protocolsDB = os.equals(LINUX) 77 | ? new LinuxNativeProtocolsDB((LinuxLibProto) lib) 78 | : new DefaultNativeProtocolsDB(lib); 79 | // Try to lookup a protocol to make sure the library loaded and found the functions 80 | protocolsDB.getProtocolByName("ip"); 81 | protocolsDB.getProtocolByNumber(0); 82 | 83 | return protocolsDB; 84 | } catch (Throwable t) { 85 | Logger.getLogger(NativeProtocolsDB.class.getName()).log(Level.WARNING, "Failed to load native protocols db", t); 86 | return null; 87 | } 88 | } 89 | 90 | public static class UnixProtoent extends jnr.ffi.Struct { 91 | public final String name = new UTF8StringRef(); 92 | public final Pointer aliases = new Pointer(); 93 | public final Signed32 proto = new Signed32(); 94 | 95 | public UnixProtoent(jnr.ffi.Runtime runtime) { 96 | super(runtime); 97 | } 98 | } 99 | 100 | public static interface LibProto { 101 | UnixProtoent getprotobyname(String name); 102 | UnixProtoent getprotobynumber(int proto); 103 | UnixProtoent getprotoent(); 104 | void setprotoent(int stayopen); 105 | void endprotoent(); 106 | } 107 | 108 | public static interface LinuxLibProto extends LibProto{ 109 | int getprotobyname_r(String proto, @Direct UnixProtoent protoent, Pointer buf, NativeLong buflen, Pointer result); 110 | int getprotobynumber_r(int proto, @Direct UnixProtoent protoent, Pointer buf, NativeLong buflen, Pointer result); 111 | int getprotoent_r(@Direct UnixProtoent protoent, Pointer buf, NativeLong buflen, Pointer result); 112 | } 113 | 114 | static Protocol protocolFromNative(UnixProtoent p) { 115 | if (p == null) { 116 | return null; 117 | } 118 | 119 | List emptyAliases = Collections.emptyList(); 120 | 121 | Pointer ptr; 122 | final Collection aliases = ((ptr = p.aliases.get()) != null) 123 | ? StringUtil.getNullTerminatedStringArray(ptr) : emptyAliases; 124 | 125 | return new Protocol(p.name.get(), (short) p.proto.get(), aliases); 126 | } 127 | 128 | static final class DefaultNativeProtocolsDB extends NativeProtocolsDB { 129 | private final LibProto lib; 130 | 131 | DefaultNativeProtocolsDB(LibProto lib) { 132 | this.lib = lib; 133 | } 134 | 135 | public synchronized Protocol getProtocolByName(String name) { 136 | return protocolFromNative(lib.getprotobyname(name)); 137 | } 138 | 139 | public synchronized Protocol getProtocolByNumber(Integer proto) { 140 | return protocolFromNative(lib.getprotobynumber(proto)); 141 | } 142 | 143 | public synchronized Collection getAllProtocols() { 144 | UnixProtoent p; 145 | List allProtocols = new ArrayList(); 146 | 147 | lib.setprotoent(0); 148 | try { 149 | while ((p = lib.getprotoent()) != null) { 150 | allProtocols.add(protocolFromNative(p)); 151 | } 152 | } finally { 153 | lib.endprotoent(); 154 | } 155 | 156 | return allProtocols; 157 | } 158 | } 159 | 160 | static final class LinuxNativeProtocolsDB extends NativeProtocolsDB { 161 | private static final int BUFLEN = 4096; 162 | private final Runtime runtime; 163 | private final Pointer buf; 164 | private final LinuxLibProto lib; 165 | 166 | 167 | LinuxNativeProtocolsDB(LinuxLibProto lib) { 168 | this.lib = lib; 169 | this.runtime = Library.getRuntime(lib); 170 | this.buf = Memory.allocateDirect(runtime, BUFLEN); 171 | } 172 | 173 | public synchronized Protocol getProtocolByName(String name) { 174 | UnixProtoent protoent = new UnixProtoent(runtime); 175 | Pointer result = Memory.allocateDirect(runtime, runtime.addressSize()); 176 | if (lib.getprotobyname_r(name, protoent, buf, new NativeLong(BUFLEN), result) == 0) { 177 | return result.getPointer(0) != null ? protocolFromNative(protoent) : null; 178 | } 179 | 180 | throw new RuntimeException("getprotobyname_r failed"); 181 | } 182 | 183 | public synchronized Protocol getProtocolByNumber(Integer number) { 184 | UnixProtoent protoent = new UnixProtoent(runtime); 185 | Pointer result = Memory.allocateDirect(runtime, runtime.addressSize()); 186 | if (lib.getprotobynumber_r(number, protoent, buf, new NativeLong(BUFLEN), result) == 0) { 187 | return result.getPointer(0) != null ? protocolFromNative(protoent) : null; 188 | } 189 | 190 | throw new RuntimeException("getprotobynumber_r failed"); 191 | } 192 | 193 | public synchronized Collection getAllProtocols() { 194 | UnixProtoent p = new UnixProtoent(runtime); 195 | List allProtocols = new ArrayList(); 196 | Pointer result = Memory.allocateDirect(runtime, runtime.addressSize()); 197 | NativeLong buflen = new NativeLong(BUFLEN); 198 | 199 | lib.setprotoent(0); 200 | try { 201 | while (lib.getprotoent_r(p, buf, buflen, result) == 0 && result.getPointer(0) != null) { 202 | allProtocols.add(protocolFromNative(p)); 203 | } 204 | } finally { 205 | lib.endprotoent(); 206 | } 207 | 208 | return allProtocols; 209 | } 210 | } 211 | } 212 | -------------------------------------------------------------------------------- /src/main/java/jnr/netdb/NativeServicesDB.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2010 Wayne Meissner 3 | * 4 | * This file is part of jnr. 5 | * 6 | * Licensed under the Apache License, Version 2.0 (the "License"); 7 | * you may not use this file except in compliance with the License. 8 | * You may obtain a copy of the License at 9 | * 10 | * http://www.apache.org/licenses/LICENSE-2.0 11 | * 12 | * Unless required by applicable law or agreed to in writing, software 13 | * distributed under the License is distributed on an "AS IS" BASIS, 14 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 15 | * See the License for the specific language governing permissions and 16 | * limitations under the License. 17 | */ 18 | 19 | package jnr.netdb; 20 | 21 | import jnr.ffi.*; 22 | import jnr.ffi.Runtime; 23 | import jnr.ffi.annotations.Direct; 24 | import jnr.ffi.annotations.Out; 25 | 26 | import java.nio.ByteOrder; 27 | import java.util.ArrayList; 28 | import java.util.Collection; 29 | import java.util.Collections; 30 | import java.util.HashMap; 31 | import java.util.List; 32 | import java.util.Map; 33 | import java.util.logging.Level; 34 | import java.util.logging.Logger; 35 | 36 | import static jnr.ffi.Platform.OS.*; 37 | 38 | /** 39 | * 40 | */ 41 | abstract class NativeServicesDB implements ServicesDB { 42 | 43 | protected final LibServices lib; 44 | 45 | public NativeServicesDB(LibServices lib) { 46 | this.lib = lib; 47 | } 48 | 49 | public static final NativeServicesDB getInstance() { 50 | return SingletonHolder.INSTANCE; 51 | } 52 | 53 | private static final class SingletonHolder { 54 | public static final NativeServicesDB INSTANCE = load(); 55 | } 56 | 57 | static final NativeServicesDB load() { 58 | try { 59 | Platform.OS os = Platform.getNativePlatform().getOS(); 60 | 61 | // The ServiceEntry struct is only known to match on Windows, MacOSX, Linux, Solaris. 62 | // We assume FreeBSD and NetBSD also match. 63 | if (!(os.equals(DARWIN) || (os.equals(WINDOWS) && Platform.getNativePlatform().getCPU() == Platform.CPU.I386) 64 | || os.equals(LINUX) || os.equals(SOLARIS) 65 | || os.equals(FREEBSD) || os.equals(NETBSD))) { 66 | return null; 67 | } 68 | 69 | LibServices lib; 70 | if (os.equals(WINDOWS)) { 71 | Map options = new HashMap(); 72 | options.put(LibraryOption.CallingConvention, CallingConvention.STDCALL); 73 | lib = Library.loadLibrary(LibServices.class, options, "Ws2_32"); 74 | 75 | } else { 76 | String[] libnames = os.equals(SOLARIS) 77 | ? new String[] { "socket", "nsl", "c" } 78 | : new String[] { "c" }; 79 | 80 | if (os.equals(LINUX)) { 81 | lib = Library.loadLibrary(LinuxLibServices.class, libnames); 82 | } else { 83 | lib = Library.loadLibrary(LibServices.class, libnames); 84 | } 85 | } 86 | 87 | NativeServicesDB services = os.equals(LINUX) 88 | ? new LinuxServicesDB(lib) 89 | : new DefaultNativeServicesDB(lib); 90 | // Try to lookup a service to make sure the library loaded and found the functions 91 | if (services.getServiceByName("comsat", "udp") == null) { 92 | return null; 93 | } 94 | services.getServiceByName("bootps", "udp"); 95 | services.getServiceByPort(67, "udp"); 96 | 97 | return services; 98 | 99 | } catch (Throwable t) { 100 | Logger.getLogger(NativeServicesDB.class.getName()).log(Level.WARNING, "Failed to load native services db", t); 101 | return null; 102 | } 103 | } 104 | 105 | public static class UnixServent extends jnr.ffi.Struct { 106 | public final String name = new UTF8StringRef(); 107 | public final Pointer aliases = new Pointer(); 108 | public final Signed32 port = new Signed32(); 109 | public final String proto = new UTF8StringRef(); 110 | 111 | public UnixServent(jnr.ffi.Runtime runtime) { 112 | super(runtime); 113 | } 114 | } 115 | 116 | public static class LinuxServent extends UnixServent { 117 | public static final int BUFLEN = 4096; 118 | public final jnr.ffi.Pointer buf; 119 | 120 | public LinuxServent(jnr.ffi.Runtime runtime) { 121 | super(runtime); 122 | this.buf = Memory.allocateDirect(runtime, BUFLEN, true); 123 | } 124 | } 125 | 126 | public static interface LibServices { 127 | UnixServent getservbyname(String name, String proto); 128 | UnixServent getservbyport(Integer port, String proto); 129 | UnixServent getservent(); 130 | void endservent(); 131 | } 132 | 133 | public static interface LinuxLibServices extends LibServices { 134 | int getservbyname_r(String name, String proto, @Direct UnixServent servent, 135 | Pointer buf, NativeLong buflen, @Out Pointer result); 136 | int getservbyport_r(Integer port, String proto, @Direct UnixServent servent, 137 | Pointer buf, NativeLong buflen, @Out Pointer result); 138 | int getservent_r(@Direct UnixServent servent, 139 | Pointer buf, NativeLong buflen, Pointer result); 140 | } 141 | 142 | static int ntohs(int value) { 143 | int hostValue = ByteOrder.nativeOrder().equals(ByteOrder.LITTLE_ENDIAN) ? Short.reverseBytes((short) value) : value; 144 | if (hostValue < 0) { 145 | // The byte flipping above will return numbers >= 32768 as a negative value, 146 | // so they need to be converted back to a unsigned 16 bit value. 147 | hostValue = ((hostValue & 0x7FFF) + 0x8000); 148 | } 149 | 150 | return hostValue; 151 | } 152 | 153 | static int htons(int value) { 154 | return ByteOrder.nativeOrder().equals(ByteOrder.LITTLE_ENDIAN) ? Short.reverseBytes((short) value) : value; 155 | } 156 | 157 | static Service serviceFromNative(UnixServent s) { 158 | if (s == null) { 159 | return null; 160 | } 161 | 162 | List emptyAliases = Collections.emptyList(); 163 | Pointer ptr; 164 | final Collection aliases = ((ptr = s.aliases.get()) != null) 165 | ? StringUtil.getNullTerminatedStringArray(ptr) : emptyAliases; 166 | 167 | return new Service(s.name.get(), ntohs(s.port.get()), s.proto.get(), aliases); 168 | } 169 | 170 | static final class DefaultNativeServicesDB extends NativeServicesDB { 171 | DefaultNativeServicesDB(LibServices lib) { 172 | super(lib); 173 | } 174 | 175 | public Collection getAllServices() { 176 | UnixServent s; 177 | List allServices = new ArrayList(); 178 | 179 | try { 180 | while ((s = lib.getservent()) != null) { 181 | allServices.add(serviceFromNative(s)); 182 | } 183 | } finally { 184 | lib.endservent(); 185 | } 186 | 187 | return allServices; 188 | } 189 | 190 | 191 | public Service getServiceByName(String name, String proto) { 192 | return serviceFromNative(lib.getservbyname(name, proto)); 193 | } 194 | 195 | public Service getServiceByPort(Integer port, String proto) { 196 | return serviceFromNative(lib.getservbyport(htons(port), proto)); 197 | } 198 | } 199 | 200 | static final class LinuxServicesDB extends NativeServicesDB { 201 | private static final int BUFLEN = 4096; 202 | private final LinuxLibServices lib; 203 | private final Runtime runtime; 204 | private final Pointer buf; 205 | 206 | LinuxServicesDB(LibServices lib) { 207 | super(lib); 208 | this.lib = (LinuxLibServices) lib; 209 | this.runtime = Library.getRuntime(lib); 210 | this.buf = Memory.allocateDirect(runtime, BUFLEN); 211 | } 212 | 213 | public synchronized Service getServiceByName(String name, String proto) { 214 | UnixServent servent = new UnixServent(runtime); 215 | Pointer result = Memory.allocateDirect(runtime, runtime.addressSize()); 216 | if (lib.getservbyname_r(name, proto, servent, buf, new NativeLong(BUFLEN), result) == 0) { 217 | return result.getPointer(0) != null ? serviceFromNative(servent) : null; 218 | } 219 | 220 | throw new RuntimeException("getservbyname_r failed"); 221 | } 222 | 223 | public synchronized Service getServiceByPort(Integer port, String proto) { 224 | UnixServent servent = new UnixServent(runtime); 225 | Pointer result = Memory.allocateDirect(runtime, runtime.addressSize()); 226 | if (lib.getservbyport_r(htons(port), proto, servent, buf, new NativeLong(BUFLEN), result) == 0) { 227 | return result.getPointer(0) != null ? serviceFromNative(servent) : null; 228 | } 229 | 230 | throw new RuntimeException("getservbyport_r failed"); 231 | } 232 | 233 | public synchronized Collection getAllServices() { 234 | UnixServent s = new UnixServent(runtime); 235 | List allServices = new ArrayList(); 236 | Pointer result = Memory.allocateDirect(runtime, runtime.addressSize()); 237 | NativeLong buflen = new NativeLong(BUFLEN); 238 | 239 | try { 240 | while (lib.getservent_r(s, buf, buflen, result) == 0 && result.getPointer(0) != null) { 241 | allServices.add(serviceFromNative(s)); 242 | } 243 | } finally { 244 | lib.endservent(); 245 | } 246 | 247 | return allServices; 248 | } 249 | } 250 | 251 | } 252 | -------------------------------------------------------------------------------- /src/main/java/jnr/netdb/NetDBEntry.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2010 Wayne Meissner 3 | * 4 | * This file is part of jnr. 5 | * 6 | * Licensed under the Apache License, Version 2.0 (the "License"); 7 | * you may not use this file except in compliance with the License. 8 | * You may obtain a copy of the License at 9 | * 10 | * http://www.apache.org/licenses/LICENSE-2.0 11 | * 12 | * Unless required by applicable law or agreed to in writing, software 13 | * distributed under the License is distributed on an "AS IS" BASIS, 14 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 15 | * See the License for the specific language governing permissions and 16 | * limitations under the License. 17 | */ 18 | 19 | package jnr.netdb; 20 | 21 | import java.util.Collection; 22 | 23 | final class NetDBEntry { 24 | 25 | final String name; 26 | final String data; 27 | final Collection aliases; 28 | 29 | NetDBEntry(String name, String data, Collection aliases) { 30 | this.name = name; 31 | this.data = data; 32 | this.aliases = aliases; 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /src/main/java/jnr/netdb/NetDBFilter.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2010 Wayne Meissner 3 | * 4 | * This file is part of jnr. 5 | * 6 | * Licensed under the Apache License, Version 2.0 (the "License"); 7 | * you may not use this file except in compliance with the License. 8 | * You may obtain a copy of the License at 9 | * 10 | * http://www.apache.org/licenses/LICENSE-2.0 11 | * 12 | * Unless required by applicable law or agreed to in writing, software 13 | * distributed under the License is distributed on an "AS IS" BASIS, 14 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 15 | * See the License for the specific language governing permissions and 16 | * limitations under the License. 17 | */ 18 | 19 | package jnr.netdb; 20 | 21 | /** 22 | * 23 | */ 24 | interface NetDBFilter { 25 | T filter(NetDBEntry e); 26 | } 27 | -------------------------------------------------------------------------------- /src/main/java/jnr/netdb/NetDBIterator.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2010 Wayne Meissner 3 | * 4 | * This file is part of jnr. 5 | * 6 | * Licensed under the Apache License, Version 2.0 (the "License"); 7 | * you may not use this file except in compliance with the License. 8 | * You may obtain a copy of the License at 9 | * 10 | * http://www.apache.org/licenses/LICENSE-2.0 11 | * 12 | * Unless required by applicable law or agreed to in writing, software 13 | * distributed under the License is distributed on an "AS IS" BASIS, 14 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 15 | * See the License for the specific language governing permissions and 16 | * limitations under the License. 17 | */ 18 | 19 | package jnr.netdb; 20 | 21 | import java.io.BufferedReader; 22 | import java.io.IOException; 23 | import java.io.Reader; 24 | import java.util.ArrayList; 25 | import java.util.Collections; 26 | import java.util.List; 27 | import java.util.NoSuchElementException; 28 | 29 | final class NetDBIterator implements java.util.Iterator { 30 | 31 | private final BufferedReader reader; 32 | private NetDBEntry next = null; 33 | 34 | public NetDBIterator(Reader r) { 35 | this.reader = r instanceof BufferedReader ? (BufferedReader) r : new BufferedReader(r); 36 | } 37 | 38 | NetDBEntry readNextEntry() throws IOException { 39 | String s = null; 40 | 41 | while ((s = reader.readLine()) != null) { 42 | 43 | String[] line = s.split("#", 2); 44 | // Skip empty lines, or lines that are all comment 45 | if (line.length < 1 || line[0].length() == 0) { 46 | continue; 47 | } 48 | 49 | String[] fields = line[0].trim().split("\\s+"); 50 | if (fields.length < 2 || fields[0] == null || fields[1] == null) { 51 | continue; 52 | } 53 | 54 | String serviceName = fields[0]; 55 | String data = fields[1]; 56 | List aliases; 57 | if (fields.length > 2) { 58 | aliases = new ArrayList(fields.length - 2); 59 | for (int i = 2; i < fields.length; ++i) { 60 | if (fields[i] != null) { 61 | aliases.add(fields[i]); 62 | } 63 | } 64 | } else { 65 | aliases = Collections.emptyList(); 66 | } 67 | 68 | return new NetDBEntry(serviceName, data, aliases); 69 | } 70 | 71 | return null; 72 | } 73 | 74 | public boolean hasNext() { 75 | try { 76 | return next != null || (next = readNextEntry()) != null; 77 | } catch (IOException ex) { 78 | return false; 79 | } 80 | } 81 | 82 | public NetDBEntry next() { 83 | try { 84 | NetDBEntry s = next != null ? next : readNextEntry(); 85 | if (s == null) { 86 | throw new NoSuchElementException("not found"); 87 | } 88 | next = null; 89 | 90 | return s; 91 | 92 | } catch (IOException ex) { 93 | throw new NoSuchElementException(ex.getMessage()); 94 | } 95 | } 96 | 97 | public void remove() { 98 | throw new UnsupportedOperationException("Not supported yet."); 99 | } 100 | } 101 | -------------------------------------------------------------------------------- /src/main/java/jnr/netdb/NetDBParser.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2010 Wayne Meissner 3 | * 4 | * This file is part of jnr. 5 | * 6 | * Licensed under the Apache License, Version 2.0 (the "License"); 7 | * you may not use this file except in compliance with the License. 8 | * You may obtain a copy of the License at 9 | * 10 | * http://www.apache.org/licenses/LICENSE-2.0 11 | * 12 | * Unless required by applicable law or agreed to in writing, software 13 | * distributed under the License is distributed on an "AS IS" BASIS, 14 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 15 | * See the License for the specific language governing permissions and 16 | * limitations under the License. 17 | */ 18 | 19 | package jnr.netdb; 20 | 21 | import java.io.Closeable; 22 | import java.io.IOException; 23 | import java.io.Reader; 24 | import java.util.Iterator; 25 | 26 | /** 27 | * 28 | */ 29 | class NetDBParser implements Iterable, Closeable { 30 | private final Reader reader; 31 | 32 | public NetDBParser(Reader r) { 33 | this.reader = r; 34 | } 35 | 36 | public Iterator iterator() { 37 | return new NetDBIterator(reader); 38 | } 39 | 40 | public void close() throws IOException { 41 | reader.close(); 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /src/main/java/jnr/netdb/Protocol.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2010 Wayne Meissner 3 | * 4 | * This file is part of jnr. 5 | * 6 | * Licensed under the Apache License, Version 2.0 (the "License"); 7 | * you may not use this file except in compliance with the License. 8 | * You may obtain a copy of the License at 9 | * 10 | * http://www.apache.org/licenses/LICENSE-2.0 11 | * 12 | * Unless required by applicable law or agreed to in writing, software 13 | * distributed under the License is distributed on an "AS IS" BASIS, 14 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 15 | * See the License for the specific language governing permissions and 16 | * limitations under the License. 17 | */ 18 | 19 | package jnr.netdb; 20 | 21 | import java.util.Collection; 22 | 23 | /** 24 | * An entry in the system protocol database 25 | */ 26 | public final class Protocol { 27 | /** Official protocol name */ 28 | private final String protocolName; 29 | 30 | private final int proto; 31 | 32 | /** All the aliases for this protocol */ 33 | private final Collection aliases; 34 | 35 | Protocol(String name, int proto, Collection aliases) { 36 | this.protocolName = name; 37 | this.proto = proto; 38 | this.aliases = aliases; 39 | } 40 | 41 | /** 42 | * Locates a protocol by name. 43 | * 44 | * @param name the official IANA name for the protocol, or an alias. 45 | * @return a {@code Protocol} instance, or {@code null} if the protocol could not be found. 46 | */ 47 | public static final Protocol getProtocolByName(String name) { 48 | return getProtocolDB().getProtocolByName(name); 49 | } 50 | 51 | 52 | /** 53 | * Locates a protocol by number. 54 | * 55 | * @param proto the internet protocol number of the protocol. 56 | * @return a {@code Protocol} instance, or {@code null} if the protocol could not be found. 57 | */ 58 | public static final Protocol getProtocolByNumber(int proto) { 59 | return getProtocolDB().getProtocolByNumber(proto); 60 | } 61 | 62 | 63 | /** 64 | * Returns the official IANA name of this {@code Protocol} 65 | * 66 | * @return The name of this {@code Protocol} as a {@code String} 67 | */ 68 | public final String getName() { 69 | return protocolName; 70 | } 71 | 72 | /** 73 | * Returns the official IANA protocol number for this {@code Protocol} 74 | * 75 | * @return The protocol number for this {@code Protocol} as an {@code int} 76 | */ 77 | public final int getProto() { 78 | return proto; 79 | } 80 | 81 | /** 82 | * Returns a list of aliases this {@code Protocol} is also known by. 83 | * 84 | * @return A {@code Collection} of Strings for aliases this {@code Protocol} 85 | */ 86 | public final Collection getAliases() { 87 | return aliases; 88 | } 89 | 90 | /** 91 | * Returns the currently loaded ProtocolDB 92 | * 93 | * @return an instance of {@code ProtocolDB} 94 | */ 95 | private static final ProtocolsDB getProtocolDB() { 96 | return ProtocolDBSingletonHolder.INSTANCE; 97 | } 98 | 99 | /** 100 | * Holds the global lazily-loaded instance of the ProtocolDB 101 | */ 102 | private static final class ProtocolDBSingletonHolder { 103 | static final ProtocolsDB INSTANCE = load(); 104 | 105 | private static final ProtocolsDB load() { 106 | // Try to use the native functions if possible 107 | ProtocolsDB db = NativeProtocolsDB.getInstance(); 108 | 109 | // Fall back to parsing /etc/protocols directly. 110 | if (db == null) { 111 | db = FileProtocolsDB.getInstance(); 112 | } 113 | 114 | // As a last resort, fall back to the hard coded table 115 | return db != null ? db : IANAProtocolsDB.getInstance(); 116 | } 117 | } 118 | 119 | @Override 120 | public String toString() { 121 | return String.format("", 122 | protocolName, proto, aliases); 123 | }; 124 | } 125 | -------------------------------------------------------------------------------- /src/main/java/jnr/netdb/ProtocolsDB.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2010 Wayne Meissner 3 | * 4 | * This file is part of jnr. 5 | * 6 | * Licensed under the Apache License, Version 2.0 (the "License"); 7 | * you may not use this file except in compliance with the License. 8 | * You may obtain a copy of the License at 9 | * 10 | * http://www.apache.org/licenses/LICENSE-2.0 11 | * 12 | * Unless required by applicable law or agreed to in writing, software 13 | * distributed under the License is distributed on an "AS IS" BASIS, 14 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 15 | * See the License for the specific language governing permissions and 16 | * limitations under the License. 17 | */ 18 | 19 | package jnr.netdb; 20 | 21 | import java.util.Collection; 22 | 23 | /** 24 | * 25 | */ 26 | interface ProtocolsDB { 27 | public abstract Protocol getProtocolByName(String name); 28 | public abstract Protocol getProtocolByNumber(Integer number); 29 | public abstract Collection getAllProtocols(); 30 | } 31 | -------------------------------------------------------------------------------- /src/main/java/jnr/netdb/Service.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2010 Wayne Meissner 3 | * 4 | * This file is part of jnr. 5 | * 6 | * Licensed under the Apache License, Version 2.0 (the "License"); 7 | * you may not use this file except in compliance with the License. 8 | * You may obtain a copy of the License at 9 | * 10 | * http://www.apache.org/licenses/LICENSE-2.0 11 | * 12 | * Unless required by applicable law or agreed to in writing, software 13 | * distributed under the License is distributed on an "AS IS" BASIS, 14 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 15 | * See the License for the specific language governing permissions and 16 | * limitations under the License. 17 | */ 18 | 19 | package jnr.netdb; 20 | 21 | import java.util.Collection; 22 | import java.util.Collections; 23 | 24 | /** 25 | * Holds information about TCP and UDP services on a host. 26 | */ 27 | public final class Service { 28 | /** Official service name */ 29 | private final String serviceName; 30 | /** TCP or UDP port number */ 31 | private final int port; 32 | 33 | /** Protocol to use */ 34 | final String proto; 35 | 36 | /** All the aliases for this service */ 37 | private final Collection aliases; 38 | 39 | Service(String name, int port, String proto, Collection aliases) { 40 | this.serviceName = name; 41 | this.port = port; 42 | this.proto = proto; 43 | this.aliases = aliases; 44 | } 45 | 46 | /** 47 | * Locates a service by name and protocol. 48 | * 49 | * @param name the official IANA name for the service, or an alias. 50 | * @param proto the protocol for the service. Usually "tcp" or "udp". 51 | * @return a {@code Service} instance, or {@code null} if the service could not be found. 52 | */ 53 | public static final Service getServiceByName(String name, String proto) { 54 | return getServicesDB().getServiceByName(name, proto); 55 | } 56 | 57 | 58 | /** 59 | * Locates a service by port and protocol. 60 | * 61 | * @param port the TCP or UDP port of the service. 62 | * @param proto the protocol for the service. Usually "tcp" or "udp". 63 | * @return a {@code Service} instance, or {@code null} if the service could not be found. 64 | */ 65 | public static final Service getServiceByPort(int port, String proto) { 66 | return getServicesDB().getServiceByPort(port, proto); 67 | } 68 | 69 | /** 70 | * Returns a list of all services. 71 | * 72 | * @return a {@code Collection} of {@code Service} instances. 73 | */ 74 | public static final Collection getAllServices() { 75 | return Collections.emptyList(); 76 | } 77 | 78 | /** 79 | * Returns the official IANA name of this {@code Service} 80 | * 81 | * @return The name of this {@code Service} as a {@code String} 82 | */ 83 | public final String getName() { 84 | return serviceName; 85 | } 86 | 87 | /** 88 | * Returns the official IANA port for this {@code Service} 89 | * 90 | * @return The port for this {@code Service} as an {@code int} 91 | */ 92 | public final int getPort() { 93 | return port; 94 | } 95 | 96 | /** 97 | * Gets a list of aliases this {@code Service} is also known as. 98 | * 99 | * @return A {@code Collection} of Strings for aliases this {@code Service} 100 | */ 101 | public final Collection getAliases() { 102 | return aliases; 103 | } 104 | 105 | /** 106 | * Returns the currently loaded ServicesDB 107 | * 108 | * @return an instance of {@code ServicesDB} 109 | */ 110 | private static final ServicesDB getServicesDB() { 111 | return ServicesDBSingletonHolder.INSTANCE; 112 | } 113 | 114 | /** 115 | * Holds the global lazily-loaded instance of the ServicesDB 116 | */ 117 | private static final class ServicesDBSingletonHolder { 118 | static final ServicesDB INSTANCE = load(); 119 | 120 | private static final ServicesDB load() { 121 | // Try to use the native functions if possible 122 | ServicesDB db = NativeServicesDB.load(); 123 | 124 | // Fall back to parsing /etc/services directly. 125 | if (db == null) { 126 | db = FileServicesDB.getInstance(); 127 | } 128 | 129 | // As a last resort, fall back to the hard coded table 130 | return db != null ? db : IANAServicesDB.getInstance(); 131 | } 132 | } 133 | 134 | @Override 135 | public String toString() { 136 | return String.format("", 137 | serviceName, port, proto, aliases); 138 | }; 139 | } 140 | -------------------------------------------------------------------------------- /src/main/java/jnr/netdb/ServicesDB.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2010 Wayne Meissner 3 | * 4 | * This file is part of jnr. 5 | * 6 | * Licensed under the Apache License, Version 2.0 (the "License"); 7 | * you may not use this file except in compliance with the License. 8 | * You may obtain a copy of the License at 9 | * 10 | * http://www.apache.org/licenses/LICENSE-2.0 11 | * 12 | * Unless required by applicable law or agreed to in writing, software 13 | * distributed under the License is distributed on an "AS IS" BASIS, 14 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 15 | * See the License for the specific language governing permissions and 16 | * limitations under the License. 17 | */ 18 | 19 | package jnr.netdb; 20 | 21 | import java.util.Collection; 22 | 23 | /** 24 | * 25 | */ 26 | interface ServicesDB { 27 | public abstract Service getServiceByName(String name, String proto); 28 | public abstract Service getServiceByPort(Integer port, String proto); 29 | public abstract Collection getAllServices(); 30 | } 31 | -------------------------------------------------------------------------------- /src/main/java/jnr/netdb/StringUtil.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2010 Wayne Meissner 3 | * 4 | * This file is part of jnr. 5 | * 6 | * Licensed under the Apache License, Version 2.0 (the "License"); 7 | * you may not use this file except in compliance with the License. 8 | * You may obtain a copy of the License at 9 | * 10 | * http://www.apache.org/licenses/LICENSE-2.0 11 | * 12 | * Unless required by applicable law or agreed to in writing, software 13 | * distributed under the License is distributed on an "AS IS" BASIS, 14 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 15 | * See the License for the specific language governing permissions and 16 | * limitations under the License. 17 | */ 18 | 19 | package jnr.netdb; 20 | 21 | import jnr.ffi.Platform; 22 | import jnr.ffi.Pointer; 23 | import java.util.ArrayList; 24 | import java.util.Collections; 25 | import java.util.List; 26 | 27 | /** 28 | * Utility class for native strings 29 | */ 30 | class StringUtil { 31 | 32 | public static final List getNullTerminatedStringArray(Pointer ptr) { 33 | // If it is an empty list, do not allocate an empty ArrayList for it 34 | if (ptr == null || ptr.getPointer(0) == null) { 35 | return Collections.emptyList(); 36 | } 37 | 38 | final int pointerSize = ptr.getRuntime().addressSize(); 39 | 40 | List array = new ArrayList(); 41 | 42 | Pointer p; 43 | for (int off = 0; (p = ptr.getPointer(off)) != null; off += pointerSize) { 44 | array.add(p.getString(0)); 45 | } 46 | 47 | return array; 48 | } 49 | } 50 | -------------------------------------------------------------------------------- /src/test/java/jnr/netdb/FileProtocolDBTest.java: -------------------------------------------------------------------------------- 1 | 2 | package jnr.netdb; 3 | 4 | import org.junit.After; 5 | import org.junit.AfterClass; 6 | import org.junit.Before; 7 | import org.junit.BeforeClass; 8 | import org.junit.Test; 9 | import static org.junit.Assert.*; 10 | 11 | /** 12 | * 13 | */ 14 | public class FileProtocolDBTest { 15 | 16 | public FileProtocolDBTest() { 17 | } 18 | 19 | @BeforeClass 20 | public static void setUpClass() throws Exception { 21 | } 22 | 23 | @AfterClass 24 | public static void tearDownClass() throws Exception { 25 | } 26 | 27 | @Before 28 | public void setUp() { 29 | } 30 | 31 | @After 32 | public void tearDown() { 33 | } 34 | 35 | @Test public void canLookupIpProtocolByName() { 36 | ProtocolsDB db = FileProtocolsDB.getInstance(); 37 | // we try ip first and then ipv4 due to jnr/jnr-netdb#4 38 | Protocol p = Protocol.getProtocolByName("ip"); 39 | if (p != null) { 40 | assertEquals("incorrect proto number", 0, p.getProto()); 41 | assertEquals("incorrect name", "ip", p.getName()); 42 | } else { 43 | p = Protocol.getProtocolByName("ipv4"); 44 | assertNotNull("could not lookup ipv4 protocol", p); 45 | assertEquals("incorrect proto number", 4, p.getProto()); 46 | assertEquals("incorrect name", "ipv4", p.getName()); 47 | } 48 | } 49 | 50 | @Test public void canLookupIpProtocolByNumber() { 51 | ProtocolsDB db = FileProtocolsDB.getInstance(); 52 | // we try ip first and then ipv4 due to jnr/jnr-netdb#4 53 | Protocol p = Protocol.getProtocolByName("ip"); 54 | if (p != null) { 55 | p = Protocol.getProtocolByNumber(0); 56 | assertEquals("incorrect proto number", 0, p.getProto()); 57 | assertEquals("incorrect name", "ip", p.getName()); 58 | } else { 59 | p = Protocol.getProtocolByNumber(4); 60 | assertNotNull("could not lookup ip protocol", p); 61 | assertEquals("incorrect proto number", 4, p.getProto()); 62 | assertEquals("incorrect name", "ipv4", p.getName()); 63 | } 64 | } 65 | } 66 | -------------------------------------------------------------------------------- /src/test/java/jnr/netdb/FileServicesDBTest.java: -------------------------------------------------------------------------------- 1 | 2 | package jnr.netdb; 3 | 4 | import org.junit.After; 5 | import org.junit.AfterClass; 6 | import org.junit.Before; 7 | import org.junit.BeforeClass; 8 | import org.junit.Test; 9 | import static org.junit.Assert.*; 10 | 11 | /** 12 | * 13 | */ 14 | public class FileServicesDBTest { 15 | 16 | public FileServicesDBTest() { 17 | } 18 | 19 | @BeforeClass 20 | public static void setUpClass() throws Exception { 21 | } 22 | 23 | @AfterClass 24 | public static void tearDownClass() throws Exception { 25 | } 26 | 27 | @Before 28 | public void setUp() { 29 | } 30 | 31 | @After 32 | public void tearDown() { 33 | } 34 | 35 | @Test public void canLookupBootpServiceByName() { 36 | FileServicesDB db = new FileServicesDB(); 37 | Service s = db.getServiceByName("bootps", "udp"); 38 | assertNotNull("could not lookup bootps service", s); 39 | assertEquals("incorrect port", 67, s.getPort()); 40 | assertEquals("incorrect name", "bootps", s.getName()); 41 | } 42 | 43 | @Test public void canLookupBootpServiceByPort() { 44 | FileServicesDB db = new FileServicesDB(); 45 | Service s = db.getServiceByPort(67, "udp"); 46 | assertNotNull("could not lookup bootps service", s); 47 | assertEquals("incorrect port", 67, s.getPort()); 48 | assertEquals("incorrect name", "bootps", s.getName()); 49 | } 50 | 51 | @Test public void canLookupServiceWithAliasByName() { 52 | ServicesDB db = new FileServicesDB(); 53 | Service s = db.getServiceByName("comsat", "udp"); 54 | assertNotNull("could not lookup comsat/biff service", s); 55 | assertEquals("incorrect port", 512, s.getPort()); 56 | assertTrue(s.getName().equals("biff") || s.getName().equals("comsat")); 57 | assertTrue(s.getAliases().contains("biff") || s.getAliases().contains("comsat")); 58 | } 59 | 60 | @Test public void canLookupServiceWithAliasByPort() { 61 | ServicesDB db = new FileServicesDB(); 62 | Service s = db.getServiceByPort(512, "udp"); 63 | assertNotNull("could not lookup comsat/biff service", s); 64 | assertEquals("incorrect port", 512, s.getPort()); 65 | assertTrue(s.getName().equals("biff") || s.getName().equals("comsat")); 66 | assertTrue(s.getAliases().contains("biff") || s.getAliases().contains("comsat")); 67 | } 68 | 69 | } -------------------------------------------------------------------------------- /src/test/java/jnr/netdb/NativeProtocolsDBTest.java: -------------------------------------------------------------------------------- 1 | 2 | package jnr.netdb; 3 | 4 | import org.junit.After; 5 | import org.junit.AfterClass; 6 | import org.junit.Before; 7 | import org.junit.BeforeClass; 8 | import org.junit.Test; 9 | import static org.junit.Assert.*; 10 | 11 | /** 12 | * 13 | */ 14 | public class NativeProtocolsDBTest { 15 | 16 | public NativeProtocolsDBTest() { 17 | } 18 | 19 | @BeforeClass 20 | public static void setUpClass() throws Exception { 21 | } 22 | 23 | @AfterClass 24 | public static void tearDownClass() throws Exception { 25 | } 26 | 27 | @Before 28 | public void setUp() { 29 | } 30 | 31 | @After 32 | public void tearDown() { 33 | } 34 | 35 | @Test public void canLookupIpProtocolByName() { 36 | ProtocolsDB db = NativeProtocolsDB.getInstance(); 37 | // we try ip first and then ipv4 due to jnr/jnr-netdb#4 38 | Protocol p = Protocol.getProtocolByName("ip"); 39 | if (p != null) { 40 | assertEquals("incorrect proto number", 0, p.getProto()); 41 | assertEquals("incorrect name", "ip", p.getName()); 42 | } else { 43 | p = Protocol.getProtocolByName("ipv4"); 44 | assertNotNull("could not lookup ipv4 protocol", p); 45 | assertEquals("incorrect proto number", 4, p.getProto()); 46 | assertEquals("incorrect name", "ipv4", p.getName()); 47 | } 48 | } 49 | 50 | @Test public void canLookupIpProtocolByNumber() { 51 | ProtocolsDB db = NativeProtocolsDB.getInstance(); 52 | // we try ip first and then ipv4 due to jnr/jnr-netdb#4 53 | Protocol p = Protocol.getProtocolByName("ip"); 54 | if (p != null) { 55 | p = Protocol.getProtocolByNumber(0); 56 | assertEquals("incorrect proto number", 0, p.getProto()); 57 | assertEquals("incorrect name", "ip", p.getName()); 58 | } else { 59 | p = Protocol.getProtocolByNumber(4); 60 | assertNotNull("could not lookup ip protocol", p); 61 | assertEquals("incorrect proto number", 4, p.getProto()); 62 | assertEquals("incorrect name", "ipv4", p.getName()); 63 | } 64 | } 65 | 66 | @Test public void canLookupTcpProtocolByName() { 67 | ProtocolsDB db = NativeProtocolsDB.getInstance(); 68 | Protocol p = db.getProtocolByName("tcp"); 69 | assertNotNull("could not lookup tcp protocol", p); 70 | assertEquals("incorrect proto number", 6, p.getProto()); 71 | assertEquals("incorrect name", "tcp", p.getName()); 72 | } 73 | 74 | @Test public void canLookupTcpProtocolByNumber() { 75 | ProtocolsDB db = NativeProtocolsDB.getInstance(); 76 | Protocol p = db.getProtocolByNumber(6); 77 | assertNotNull("could not lookup tcp protocol", p); 78 | assertEquals("incorrect proto number", 6, p.getProto()); 79 | assertEquals("incorrect name", "tcp", p.getName()); 80 | } 81 | 82 | @Test public void getAllProtocolsReturnsNonEmptyList() { 83 | ProtocolsDB db = NativeProtocolsDB.getInstance(); 84 | assertFalse(db.getAllProtocols().isEmpty()); 85 | } 86 | 87 | @Test public void getAllProtocolsContainsTcp() { 88 | ProtocolsDB db = NativeProtocolsDB.getInstance(); 89 | boolean tcpFound = false; 90 | for (Protocol p : db.getAllProtocols()) { 91 | if (p.getName().equals("tcp") || p.getAliases().contains("TCP")) { 92 | tcpFound = true; 93 | break; 94 | } 95 | } 96 | assertTrue(tcpFound); 97 | } 98 | } -------------------------------------------------------------------------------- /src/test/java/jnr/netdb/NativeServicesDBTest.java: -------------------------------------------------------------------------------- 1 | 2 | package jnr.netdb; 3 | 4 | import jnr.ffi.Platform; 5 | import org.junit.After; 6 | import org.junit.AfterClass; 7 | import org.junit.Before; 8 | import org.junit.BeforeClass; 9 | import org.junit.Test; 10 | import static org.junit.Assert.*; 11 | 12 | /** 13 | * 14 | */ 15 | public class NativeServicesDBTest { 16 | 17 | public NativeServicesDBTest() { 18 | } 19 | 20 | @BeforeClass 21 | public static void setUpClass() throws Exception { 22 | } 23 | 24 | @AfterClass 25 | public static void tearDownClass() throws Exception { 26 | } 27 | 28 | @Before 29 | public void setUp() { 30 | } 31 | 32 | @After 33 | public void tearDown() { 34 | } 35 | 36 | @Test public void canLookupServiceThan32768ByName() { 37 | if (Platform.getNativePlatform().getOS().equals(Platform.OS.DARWIN)) { 38 | ServicesDB db = NativeServicesDB.load(); 39 | Service s = db.getServiceByName("blp5", "udp"); 40 | assertNotNull("could not lookup blp5 service", s); 41 | assertEquals("incorrect port", 48129, s.getPort()); 42 | assertEquals("incorrect name", "blp5", s.getName()); 43 | } 44 | } 45 | 46 | @Test public void canLookupServiceLargerThan32768ByPort() { 47 | if (Platform.getNativePlatform().getOS().equals(Platform.OS.DARWIN)) { 48 | ServicesDB db = NativeServicesDB.load(); 49 | Service s = db.getServiceByPort(48129, "udp"); 50 | assertNotNull("could not lookup blp5 service", s); 51 | assertEquals("incorrect port", 48129, s.getPort()); 52 | assertEquals("incorrect name", "blp5", s.getName()); 53 | } 54 | } 55 | 56 | @Test public void canLookupServiceWithAliasByName() { 57 | ServicesDB db = NativeServicesDB.load(); 58 | Service s = db.getServiceByName("comsat", "udp"); 59 | assertNotNull("could not lookup comsat/biff service", s); 60 | assertEquals("incorrect port", 512, s.getPort()); 61 | assertTrue(s.getName().equals("biff") || s.getName().equals("comsat")); 62 | assertTrue(s.getAliases().contains("biff") || s.getAliases().contains("comsat")); 63 | } 64 | 65 | @Test public void canLookupServiceWithAliasByPort() { 66 | ServicesDB db = NativeServicesDB.load(); 67 | Service s = db.getServiceByPort(512, "udp"); 68 | assertNotNull("could not lookup comsat/biff service", s); 69 | assertEquals("incorrect port", 512, s.getPort()); 70 | assertTrue(s.getName().equals("biff") || s.getName().equals("comsat")); 71 | assertTrue(s.getAliases().contains("biff") || s.getAliases().contains("comsat")); 72 | } 73 | 74 | @Test public void getAllServicesReturnsNonEmptyList() { 75 | ServicesDB db = NativeServicesDB.load(); 76 | assertFalse(db.getAllServices().isEmpty()); 77 | } 78 | 79 | @Test public void getAllServicesContainsFtp() { 80 | ServicesDB db = NativeServicesDB.load(); 81 | boolean ftpFound = false; 82 | for (Service s : db.getAllServices()) { 83 | if (s.getName().equals("ftp") || s.getAliases().contains("ftp")) { 84 | ftpFound = true; 85 | break; 86 | } 87 | } 88 | assertTrue(ftpFound); 89 | } 90 | } -------------------------------------------------------------------------------- /src/test/java/jnr/netdb/ProtocolTest.java: -------------------------------------------------------------------------------- 1 | 2 | package jnr.netdb; 3 | 4 | import org.junit.After; 5 | import org.junit.AfterClass; 6 | import org.junit.Before; 7 | import org.junit.BeforeClass; 8 | import org.junit.Test; 9 | import static org.junit.Assert.*; 10 | 11 | /** 12 | * 13 | */ 14 | public class ProtocolTest { 15 | 16 | public ProtocolTest() { 17 | } 18 | 19 | @BeforeClass 20 | public static void setUpClass() throws Exception { 21 | } 22 | 23 | @AfterClass 24 | public static void tearDownClass() throws Exception { 25 | } 26 | 27 | @Before 28 | public void setUp() { 29 | } 30 | 31 | @After 32 | public void tearDown() { 33 | } 34 | 35 | @Test public void canLookupIpProtocolByName() { 36 | // we try ip first and then ipv4 due to jnr/jnr-netdb#4 37 | Protocol p = Protocol.getProtocolByName("ip"); 38 | if (p != null) { 39 | assertEquals("incorrect proto number", 0, p.getProto()); 40 | assertEquals("incorrect name", "ip", p.getName()); 41 | } else { 42 | p = Protocol.getProtocolByName("ipv4"); 43 | assertNotNull("could not lookup ipv4 protocol", p); 44 | assertEquals("incorrect proto number", 4, p.getProto()); 45 | assertEquals("incorrect name", "ipv4", p.getName()); 46 | } 47 | } 48 | 49 | @Test public void returnsNullOnUnknownProtocol() { 50 | Protocol p = Protocol.getProtocolByName("foo-bar-baz"); 51 | assertNull("could not handle unknown protocol", p); 52 | } 53 | 54 | @Test public void canLookupIpProtocolByNumber() { 55 | // we try ip first and then ipv4 due to jnr/jnr-netdb#4 56 | Protocol p = Protocol.getProtocolByName("ip"); 57 | if (p != null) { 58 | p = Protocol.getProtocolByNumber(0); 59 | assertEquals("incorrect proto number", 0, p.getProto()); 60 | assertEquals("incorrect name", "ip", p.getName()); 61 | } else { 62 | p = Protocol.getProtocolByNumber(4); 63 | assertNotNull("could not lookup ip protocol", p); 64 | assertEquals("incorrect proto number", 4, p.getProto()); 65 | assertEquals("incorrect name", "ipv4", p.getName()); 66 | } 67 | } 68 | 69 | @Test public void returnsNullOnInvalidNumber() { 70 | Protocol p = Protocol.getProtocolByNumber(-1); 71 | assertNull("could not handle invalid number ", p); 72 | } 73 | } 74 | -------------------------------------------------------------------------------- /src/test/java/jnr/netdb/ServiceTest.java: -------------------------------------------------------------------------------- 1 | 2 | package jnr.netdb; 3 | 4 | import org.junit.After; 5 | import org.junit.AfterClass; 6 | import org.junit.Before; 7 | import org.junit.BeforeClass; 8 | import org.junit.Test; 9 | import static org.junit.Assert.*; 10 | 11 | /** 12 | * 13 | */ 14 | public class ServiceTest { 15 | 16 | public ServiceTest() { 17 | } 18 | 19 | @BeforeClass 20 | public static void setUpClass() throws Exception { 21 | } 22 | 23 | @AfterClass 24 | public static void tearDownClass() throws Exception { 25 | } 26 | 27 | @Before 28 | public void setUp() { 29 | } 30 | 31 | @After 32 | public void tearDown() { 33 | } 34 | 35 | 36 | 37 | @Test public void canLookupBootpServiceByName() { 38 | Service s = Service.getServiceByName("bootps", "udp"); 39 | assertNotNull("could not lookup bootps service", s); 40 | assertEquals("incorrect port", 67, s.getPort()); 41 | assertEquals("incorrect name", "bootps", s.getName()); 42 | } 43 | 44 | @Test public void canLookupBootpServiceByPort() { 45 | Service s = Service.getServiceByPort(67, "udp"); 46 | assertNotNull("could not lookup bootps service", s); 47 | assertEquals("incorrect port", 67, s.getPort()); 48 | assertEquals("incorrect name", "bootps", s.getName()); 49 | } 50 | } --------------------------------------------------------------------------------