Python::Identify 端口上的 PID
Python::Identify PID on Port
我想制作一个脚本,可以
- 确定哪些端口是运行。
- 终止端口上的进程运行,将以端口号作为参数。
我完成了第一个任务,但是第二个任务有一些问题。 This thread 表明 lsof
不是跨平台的,这使得这个问题有点 不可能 解决。
然后我尝试使用 python 中的 netstat -b
来列出 ut PID,但它需要权限,我不确定如何使用 subprocess
模块来做到这一点。
tcpview
和 tcpvcon
也没有帮助。由于某种原因 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()
我想制作一个脚本,可以
- 确定哪些端口是运行。
- 终止端口上的进程运行,将以端口号作为参数。
我完成了第一个任务,但是第二个任务有一些问题。 This thread 表明 lsof
不是跨平台的,这使得这个问题有点 不可能 解决。
然后我尝试使用 python 中的 netstat -b
来列出 ut PID,但它需要权限,我不确定如何使用 subprocess
模块来做到这一点。
tcpview
和 tcpvcon
也没有帮助。由于某种原因 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()