【发布时间】:2017-11-02 20:06:36
【问题描述】:
有没有办法或工具只重置一侧的连接?
例如tcpkill向双方发送RST数据包,但我需要模拟连接半开时的情况:客户端关闭连接,但服务器不知道。
Iptables 配置也可能会有所帮助,当它在一些短暂的超时后开始拒绝客户端数据包时:--reject-with tcp-reset
【问题讨论】:
标签: java networking iptables
有没有办法或工具只重置一侧的连接?
例如tcpkill向双方发送RST数据包,但我需要模拟连接半开时的情况:客户端关闭连接,但服务器不知道。
Iptables 配置也可能会有所帮助,当它在一些短暂的超时后开始拒绝客户端数据包时:--reject-with tcp-reset
【问题讨论】:
标签: java networking iptables
在 Java 程序中,对从 Socket 获得的输入流或输出流调用 close() 将关闭连接的一侧。
但是,您似乎在问一个应用程序是否可以“半关闭”属于另一个进程的 TCP/IP 连接
据我所知,普通的使用空间应用程序(Java 与否)无法关闭或半关闭另一个应用程序的套接字。当然不是在 UNIX/Linux 系统上。特权用户空间应用程序也是如此。
因此,您可以使用像 tcpkill 这样的工具来注入原始数据包。可以使用本地库(例如 jpcap)在 Java 中做同样的事情来做“肮脏的工作”……只要你的 Java 应用程序是特权的。但是使用Process.exec(....) 来运行tcpkill 或同等功能会更简单。
Iptables 配置也可能会有所帮助,当它在一些短暂的超时后开始拒绝客户端数据包时:
--reject-with tcp-reset
我不会那样做。您可能会为系统或虚拟机留下导致问题或更糟的 iptables 配置。
【讨论】: