# Jalankan dengan sudo import os import re from subprocess import check_output import psutil regex_ip_port = r"^((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?):\d+$" re_ip_port = re.compile(regex_ip_port) def get_listening_processes(): procs = psutil.process_iter(['username', 'cmdline']) procs = {p.pid: p.info for p in procs} r = dict() process_info = check_output(['netstat', '-tulpn'], text=True).split('\n') for line in process_info[1:]: parts = line.split() if len(parts) < 7: continue pid = parts[6].split('/')[0] try: pid = int(pid) except ValueError: continue try: proc = psutil.Process(pid) except psutil.NoSuchProcess: continue ip_port = parts[3] if not re_ip_port.match(ip_port): continue ip, port = ip_port.split(':') port = int(port) info = procs[pid] r[pid] = dict( ip=ip, port=port, user=info['username'], cmd=info['cmdline']) return r if __name__ == '__main__': from pprint import pprint r = get_listening_processes() pprint(r)