Created
May 31, 2019 22:59
-
-
Save lhaagsma/20822e23045af88b33edbf7d1123d8db to your computer and use it in GitHub Desktop.
Download and provide interface to port to service (better then socket.getservbyport, as /etc/services is not always complete)
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env python | |
import os | |
import csv | |
import requests | |
CSV_DIR = 'resources' | |
CSV_PATH = 'resources/service-names-port-numbers.csv' | |
URL = 'https://www.iana.org/assignments/service-names-port-numbers/service-names-port-numbers.csv' | |
def _download_and_save(outfile): | |
data = requests.get(URL).content | |
open(outfile, 'w').write(data) | |
class PortToName(object): | |
def __init__(self, csv_path=CSV_PATH): | |
self.map = {} | |
self.csv_path = csv_path | |
if not os.path.exists(CSV_DIR): | |
os.mkdir(CSV_DIR) | |
if not os.path.exists(CSV_PATH): | |
_download_and_save(CSV_PATH) | |
self._load_csv() | |
def _load_csv(self): | |
with open(self.csv_path) as fh: | |
for row in csv.DictReader(fh, delimiter=','): | |
port = row['Port Number'] | |
service = row['Service Name'] | |
if service == '': | |
continue | |
self.map[port] = service | |
def resolve(self, port, filler='-'): | |
return self.map.get(str(port), filler) | |
if __name__ == '__main__': | |
port_resolver = PortToName() | |
print port_resolver.resolve(445) | |
print port_resolver.resolve('445') |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment