使用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 的進程

相關內容