Python::Identify 端口上的 PID

Python::Identify PID on Port

我想制作一个脚本,可以

  1. 确定哪些端口是运行。
  2. 终止端口上的进程运行,将以端口号作为参数。

我完成了第一个任务,但是第二个任务有一些问题。 This thread 表明 lsof 不是跨平台的,这使得这个问题有点 不可能 解决。

然后我尝试使用 python 中的 netstat -b 来列出 ut PID,但它需要权限,我不确定如何使用 subprocess 模块来做到这一点。

tcpviewtcpvcon 也没有帮助。由于某种原因 returns 没有使用 tcpvcon -a 443

我不确定 psutil 模块是否也能提供帮助,我知道如何使用它查找 PID,但不确定如何根据特定端口查找 PID。

有什么跨平台的方法吗?也许从 python?

调用 Bash 脚本

我找到了解决方案,必须使用 psutil 模块进行硬编码。

import psutil
import sys

def get_pid():
    connections = psutil.net_connections()
    port = int(sys.argv[1])
    for con in connections:
        if con.raddr != tuple():
            if con.raddr.port == port:
                return con.pid, con.status
        if con.laddr != tuple():
            if con.laddr.port == port:
                return con.pid, con.status
    return -1

if __name__ == '__main__':
    if len(sys.argv) > 1:
        pid = get_pid()
        if pid == -1:
            print(":: Not Found :<")
        else:
            print(f"Found service on Port {sys.argv[1]}")
            print(f"[+] PID: {pid[0]}")
            print(f"[+] Status: {pid[1]}")
            ch = input("Wanna Close: (y/n) ")
            if ch.lower() == 'y':
                p = psutil.Process(pid[0])
                p.terminate()