使用socat模拟tcp断开连接

使用socat模拟tcp断开连接

我正在尝试使用 socat 命令来模拟我的客户端服务和远程主机上的 EMS 代理进程之间的 TCP 断开连接。我正在运行此 socat 命令

socat TCP-LISTEN:8123,fork TCP:远程主机名:端口

我在服务器上运行这个命令服务器1- 我正在配置我的客户端服务以连接到服务器1:8123- 这使得客户端能够连接到实际的 EMS 代理。

但是 - 当我想模拟断开连接时 - 我正在终止 socat 进程(我通过 ps aux | grep socat 找到 pid) - 但这似乎并没有终止连接 - 我可以看到客户端仍然能够与 ems 代理通信。(为什么 socat 在这个阶段没有被杀死?)

但是 - 如果我现在重新启动客户端,那么它将无法连接到代理(因为现在 socat 进程确实已经死了)。

我不知道这里发生了什么——我怎样才能确保 socat 进程肯定被终止了?

答案1

我认为这取决于你如何终止 socat 进程。可能 socat 不接受你使用的信号,请尝试使用 9:

kill -9 pid

ps 的输出应该显示 socat 进程的多个 pid,您必须选择正确的一个。

执行 socat 命令后,您应该只看到一个进程:

[root@centos03 ~]# ps aux | grep socat
root     28801  0.0  0.3  41684  1936 pts/0    S+   15:22   0:00 socat TCP-LISTEN:8123,fork TCP:web:80
root     28803  0.0  0.1 103244   848 pts/3    S+   15:22   0:00 grep socat

一旦客户端建立了连接,你就会看到另一个过程:

[root@centos03 ~]# ps aux | grep socat
root     28801  0.0  0.3  41684  1940 pts/0    S+   15:22   0:00 socat TCP-LISTEN:8123,fork TCP:web:80
root     28807  0.0  0.2  45860  1452 pts/0    S+   15:25   0:00 socat TCP-LISTEN:8123,fork TCP:web:80
root     28809  0.0  0.1 103244   844 pts/3    S+   15:26   0:00 grep socat

现在如果你杀死 pid 为 28801 的进程,那么将不允许建立任何新连接,但客户端仍将保持连接,直到你杀死 pid 为 28807 的进程

相关内容