【问题标题】:Reset TCP connection one side重置 TCP 连接一侧
【发布时间】:2017-11-02 20:06:36
【问题描述】:

有没有办法或工具只重置一侧的连接? 例如tcpkill向双方发送RST数据包,但我需要模拟连接半开时的情况:客户端关闭连接,但服务器不知道。

Iptables 配置也可能会有所帮助,当它在一些短暂的超时后开始拒绝客户端数据包时:--reject-with tcp-reset

【问题讨论】:

    标签: java networking iptables


    【解决方案1】:

    在 Java 程序中,对从 Socket 获得的输入流或输出流调用 close() 将关闭连接的一侧。

    但是,您似乎在问一个应用程序是否可以“半关闭”属于另一个进程的 TCP/IP 连接

    据我所知,普通的使用空间应用程序(Java 与否)无法关闭或半关闭另一个应用程序的套接字。当然不是在 UNIX/Linux 系统上。特权用户空间应用程序也是如此。

    因此,您可以使用像 tcpkill 这样的工具来注入原始数据包。可以使用本地库(例如 jpcap)在 Java 中做同样的事情来做“肮脏的工作”……只要你的 Java 应用程序是特权的。但是使用Process.exec(....) 来运行tcpkill 或同等功能会更简单。


    Iptables 配置也可能会有所帮助,当它在一些短暂的超时后开始拒绝客户端数据包时:--reject-with tcp-reset

    我不会那样做。您可能会为系统或虚拟机留下导致问题或更糟的 iptables 配置。

    【讨论】:

    • 谢谢,可能 jpcap 是一种方法。
    猜你喜欢
    • 1970-01-01
    • 2012-08-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-20
    • 1970-01-01
    相关资源
    最近更新 更多