2011-06-03 13 views
10

Varolan bir TCP/IP bağlantısını bir programdan kesmek için kullanılabilecek bir komut var mı?Linux'ta keyfi bir TCP/IP bağlantısını nasıl kırabilirim?

TCP bağlantısında, işletim sisteminin farkında olduğu veya işletim sisteminin yalnızca yerel soketlerde TCP aktarımını gördüğü ve hangi sokete hangi istekte bulunulduğunu bilmediği bir şey var mı? Örneğin, Firefox bir sunucunun 80 numaralı bağlantı noktasına bir istek gönderirse ve bu yanıtı beklerse, örneğin. Firefox dinleme portunu bulmak ve Firefox'u ERR_CONNECTION_REFUSED ya da benzer bir şeye göstermek mümkün mü?

Veri akışını engellemeyen ve uygulamanın bu durumu ele almasına izin veren bir çözüm olmasını isterim, bunun yerine soketi veya TCP/IP bağlantısını kapatın (soket OS olduğu için mümkün olmalıdır) Bence, uygulama bir OS özelliği mi, yoksa sadece bir şey mi yapıyor?

cevap

3

tcpkill'u kullanın.

+1

Ve uygun yetkiye sahip. –

+2

Bu komutun yalnızca güvenlik duvarı tablolarına girişler eklediğini unutmayın. Bu aslında bağlantıyı kapatmıyor, ancak FF bir sonraki paket için bir hata aldığından, göndermeye/almaya çalışıyor, bu da işe yaramalı. –

+0

@Aaron Digulla: İyi puan – vitaut

0

Bu benim aldığım `iproute2 çerçevesini kullanarak.

Kural aracılığıyla (benim örnek tablo id 33) bir blockhole/ulaşılamaz kova yönlendirme tablosu oluşturun ve bunu yüksek Prio verin:

# ip rule add from all lookup 33 prio 1 

Şimdi engellemeye çalışıyorsanız bağlantıları bulabilirsiniz. Benim durumumda ben google.com bağlanmak için Chromium kullandık: google bağlanmaya

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

Dene:

# 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 

Yani masasına 33 173.194.0.0/16 ekleyip önbelleğini temizleyin izin şimdi tarayıcınızda ve bir ERR_CONNECTION_REFUSED tarayıcınızda. Eğer daha parçalı bir ayrım gerekiyorsa

Tabii
# ip route flush table 33 

, sen bayrak üzerinden tamamen tc ve u32 sınıflandırıcı kullanabilirsiniz:

basit floş kova, kendi kendine dayatılan tıkanma perdesini kaldırmak için IP:PORT açılan (ve diğer paket yönleri) ve kepçeye (denenmemiş) bir fw kuralı ekleyin:

# 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

Bu çözüm de tarayıcı bir şey göndermeye ve bir zaman aşımı tetiklemeye çalıştığında, tarayıcı bağlanamayacaktır, ancak TCP katmanındaki bir bağlantıyı kapatmayacaktır. – dronus

İlgili konular