2011-06-03 20 views
10

是否有可用於打破某些程序在現有的TCP/IP連接的任何命令?如何破解Linux上的任意TCP/IP連接?

是否有一個TCP連接的OS是知道的東西,或者說操作系統只能看到當地的插座TCP傳輸和doensn't知道哪個請求供應到插座?

例如,如果火狐發送給一些服務器的80端口的請求,並等待答覆。那麼是否有可能找到Firefox監聽端口並誘騙Firefox顯示ERR_CONNECTION_REFUSED或類似的東西。

我想要一個解決方案,不會阻止數據流,並讓應用程序處理這種情況的方式,而是關閉套接字或TCP/IP連接(這應該是可能的,因爲套接字是OS我認爲是負責任的嗎?連接是否也是操作系統屬性或應用程序所做的事情?),因此應用程序會立即作出反應。

回答

3

使用tcpkill

+1

並具有相應的權限。 – 2011-06-03 12:36:50

+2

請注意,此命令只是將條目添加到防火牆表。它並沒有真正關閉連接,但是由於FF爲它嘗試發送/接收的下一個數據包收到錯誤,應該可以正常工作。 – 2011-06-03 12:54:24

+0

@Aaron Digulla:好點 – vitaut 2011-06-03 13:02:30

0

我對這個問題的看法是通過使用`iproute2框架。

通過規則創建blockhole /桶不可達的路由表(在我的示例表編號33),並給它高研所:

# ip rule add from all lookup 33 prio 1 

現在找到你想阻止連接。在我來說,我已經使用鉻連接到google.com:

# ss -n -e -p | grep "chrom" | grep "173.194.*:443" 
ESTAB  0  0    10.211.55.4:46710   173.194.35.2:443 timer: (keepalive,38sec,0) users:(("chromium-browse",8488,106)) uid:1000 ino:38318 sk:f6a4f800 
ESTAB  0  0    10.211.55.4:49288  173.194.35.18:443 timer:(keepalive,34sec,0) users:(("chromium-browse",8488,109)) uid:1000 ino:38047 sk:f6a4cb00 

所以,讓我們增加173.194.0.0/16表33和刷新緩存:

# ip route add unreachable 173.194.0.0/16 table 33 
# ip route flush cache 

嘗試連接到谷歌.com現在在您的瀏覽器中,您將在瀏覽器中獲得ERR_CONNECTION_REFUSED

解除你的自我強加的堵塞的面紗,你簡單的沖洗桶:

# ip route flush table 33 

當然,如果你需要更細緻的區分,可以使用tc和U32分類來標記的確切IP:PORT組合(和其他分組方面的問題),並添加一個FW規則到剷鬥(未測試):

# tc filter add dev eth1 parent ffff: protocol ip prio 1 u32 \ 
    match ip src 173.194.0.0/16 match ip dport 443 classid :1 
# ip rule add fwmark 1 table 33 prio 1 realms 3/4 
+0

我認爲這個解決方案也會讓瀏覽器無法連接,但不會關閉TCP層的連接,直到瀏覽器嘗試發送某些內容並觸發超時。 – dronus 2014-01-04 23:04:07