<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
如果你的程式寫得有毛病,開啟了很多TCP連線,但一直沒有關閉,即常見的連線洩露場景,你可能想要在排查問題的過程中,先臨時kill一波洩露的連線。
又比如你要驗證程式在遇到網路錯誤時的自愈能力,想手動kill掉一些正常TCP連線,看程式是否能自動重連並恢復執行。
這些場景,都需要手動kill一部分TCP連線,那在Linux下有哪些kill連線的方法呢?
使用ngrep或tcpkill命令可以殺死活躍狀態的TCP連線,用法如下:
# ngrep殺死連線 $ sudo ngrep -d any -K3 '' 'port 54690' # 安裝tcpkill,及使用其殺死連線 $ sudo apt install dsniff $ sudo tcpkill -i any 'port 45308'
如上所示,可以發現在殺死連線時,ngrep和tcpkill都向連線方傳送了RST包。
學過《計算機網路》的同學都知道,TCP協定是通過FIN包與ACK包來做四次揮手,從而斷開TCP連線的,這是正常的TCP斷連過程,但TCP協定中還有RST包,這種包用於異常情況下斷開連線,Linux在收到RST包後,會直接關閉本端的Socket連線,而不需要經歷四次揮手過程。
而上面的ngrep與tcpkill命令,正是通過給對方傳送RST包,從而實現殺死TCP連線的。但要傳送一個正確的RST包,需要知道TCP連線互動時所使用的序列號(seq),因為亂序的包會被TCP直接丟棄,所以ngrep和tcpkill還會監聽網路卡上互動的包,以找到指定連線所使用的序列號seq。
所以,ngrep與tcpkill只能kill有流量的活躍TCP連線,對於空閒連線就無法處理了。
對於空閒狀態的TCP連線,可以用ss或hping3命令來處理,如下:
通過ss命令的-K選項可以用來kill連線,如下:
# 安裝ss命令 $ sudo apt install iproute2 # 使用ss殺死目標埠為65987的連線 $ sudo ss -K dport = 65987
注意,使用這個功能需要你的核心版本>=4.9,且開啟了CONFIG_INET_DIAG_DESTROY
選項,因此某些情況下可能無法使用。
如果無法使用ss命令,則可以考慮使用hping3命令來kill連線,hping3命令可以發任何型別的TCP包,因此只要模擬tcpkill的原理即可,如下:
上面提到了,TCP協定會直接丟棄亂序的封包,但是對於SYN包卻區別對待了,如果你隨便發一個SYN包給已連線狀態的Socket,它會回覆一個ACK,並攜帶有正確的seq序列號,如下:
# 第一個引數,表示傳送包的目標ip地址 # -a:設定包的源ip地址 # -s:設定包的源埠 # -p:設定包的目標埠 # --syn:表示發SYN包 # -V:verbose output,使hping3輸出序列號seq # -c:設定發包數量 $ sudo hping3 172.26.79.103 -a 192.168.18.230 -s 8080 -p 45316 --syn -V -c 1 using eth0, addr: 172.26.79.103, MTU: 1500 HPING 172.26.79.103 (eth0 172.26.79.103): S set, 40 headers + 0 data bytes len=40 ip=172.26.79.103 ttl=64 DF id=16518 tos=0 iplen=40 sport=45316 flags=A seq=0 win=502 rtt=13.4 ms seq=1179666991 ack=1833836153 sum=2acf urp=0
可以在輸出中找到,ack=1833836153
即是對方回覆的序列號,我們用在後面的發RST包中。
# --rst:表示發RST包 # --win:設定TCP視窗大小 # --setseq:設定包的seq序列包 $ sudo hping3 172.26.79.103 -a 192.168.18.230 -s 8080 -p 45316 --rst --win 0 --setseq 1833836153 -c 1 HPING 172.26.79.103 (eth0 172.26.79.103): R set, 40 headers + 0 data bytes --- 172.26.79.103 hping statistic --- 1 packets transmitted, 0 packets received, 100% packet loss round-trip min/avg/max = 0.0/0.0/0.0 ms
整個過程如下:
可以發現前面我們用lsof查到的連線,在傳送RST包後就查不到了,說明連線已經被kill了。整個操作看起來有點麻煩,可以自己寫個指令碼封裝一下。
以上就是kill一條TCP連線實現方法詳解的詳細內容,更多關於kill TCP連線的資料請關注it145.com其它相關文章!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45