Public
Snippet $166 authored by Owo Sugiana

Port Jaringan dan Informasi Prosesnya

network_port_info.py
# 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)