1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
# 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)