我发现使用 Java 程序绑定到端口可以阻止其他应用程序使用该端口。但是,如果某个应用程序已经在使用该端口,则无法使用 Java 程序执行此操作。如果没有管理员权限,如何阻止此类端口上的流量?
答案1
您可以尝试使用命令netstat -o
或平台上可能提供的任何替代方法,来识别正在使用要阻止的端口的进程(假设您还不知道有问题的进程)。如果您有足够的访问权限(通常意味着“如果它是在您的用户帐户中运行的程序”),则可以终止该进程(或者可能使用调试 API 强制关闭套接字,但这很棘手且依赖于平台)并自行打开套接字,而不允许共享访问,从而阻止其他进程使用它。
如果您只想阻止所有进出某个端口的流量,最好的方法可能是在您的路由器上执行此操作(假设您的计算机未直接连接到互联网)。您可能需要路由器密码(与 WiFi 密码不同),但您应该能够阻止某个端口上的所有流量,或将其引导至另一台计算机。
需要注意的是,如果管理员尝试解除端口阻塞,您无法阻止他们。他们可以终止保持端口打开的进程。他们甚至可能使用 AppArmor 或 Windows 高级防火墙等工具完全阻止您打开端口。他们还可以创建一个在系统启动时运行的进程(甚至在您登录之前),并通过非管理员无法终止的进程保留该端口。
答案2
端口 1024 及以下被视为“特权”端口,因此只有具有 root 级别访问权限的用户才能在这些端口上运行服务。端口 1025 及更高不被视为特权端口,因此任何用户都可以在这些端口上运行服务。请参阅http://www.w3.org/Daemon/User/Installation/PrivilegedPorts.html了解更多信息。