The*_*aot 1 networking process open-files
我已经咨询过任何释放正在侦听它的第三方应用程序拥有的端口的方法。假设应用程序使用套接字并侦听根现在想要在不关闭应用程序的情况下收回的特定端口。我一直无法给出答案。
有什么方法可以从终端或使用可以完成此操作的特定 API(例如 root 可以编写和运行 C++)来关闭端口句柄?
在不期望它的应用程序中没有干净的方法来关闭打开的文件(网络端口或其他)。
有一种方法可以关闭其鼻子下的文件,但应用程序可能反应不佳。它很有可能会崩溃,这会破坏目的。您可以使用系统调用在远程进程中执行ptrace
系统调用。使用lsof
或netstat
找到您感兴趣的文件描述符。然后将您最喜欢的调试器附加到相关进程并使其执行close
(或shutdown
)系统调用。
#!/bin/sh
# Usage: shutdown-in-process PID FD
gdb -n -pid "$1" -batch -x /dev/stdin <<EOF
call close($2)
detach
quit
EOF
Run Code Online (Sandbox Code Playgroud)
由于这很有可能导致应用程序崩溃,因为它与其环境的接口将不再匹配其内部数据结构,请考虑其他方法。特别是,如果目的是让不同的应用程序侦听 UDP 或 TCP 端口,您可以将流量重定向到网络层级别的不同端口(iptables
在 Linuxpfctl
下,在 BSD 下,...)。