2011-06-22 20 views
13

Bir ftp sunucusuna bağlantı oluşturmak için python's socket.py kullanıyorum. Şimdi bağlantıyı sıfırlamak (bir RST Bayrağı göndermek) ve ftp-sunucusunun yanıtını dinlemek istiyorum. (FYI, socket.send ('', 'R') kullanarak işletim sistemi, RST yerine FIN bayrağı gönderdiği için çalışmaz.)TCP/IP soket bağlantısında sıfırlama gönderme

+1

Neden bağlantıyı sıfırlamak istiyor musunuz? – EJP

+3

Kötü amaçlı bir ftpclient çoğaltılması – Anvay

+0

"Bağlantıyı sıfırla" derken ne demek istiyorsun? TCP/IP 'RST' bayrağı gibi? –

cevap

0

Bağlantılarınız üzerinde kendi davranışlarınızı uygulamak istiyorsanız, Scapy numaralı telefonu kullanmayı deneyin. Bu gerçekten kullanışlı bir kütüphane/araçtır. IP/TCP/UDP/ICMP paketleriyle oynamanıza izin verir.

1

TCP bağlantısına bir RST göndermek için SO_LINGER seçeneğini true saatini sıfır zaman aşımına ayarlayın ve sonra soketi kapatın. Bu bağlantıyı sıfırlar. Bunu Python'da nasıl yapacağımı ya da bunu yapıp yapamayacağınızı bilmiyorum.

24

SO_LINGER soketini açın ve linger süresini 0 saniyeye ayarlayın. Bu, TCP'nin kapatıldığında bağlantıyı durdurmasına, verileri temizlemesine ve bir RST göndermesine neden olur. UNP'de bölüm 7.5 ve örnek 15.21'e bakınız. python'da

:

def client(host, port): 
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) 
    s.connect((host, port)) 
    l_onoff = 1                                       
    l_linger = 0                                       
    s.setsockopt(socket.SOL_SOCKET, socket.SO_LINGER,                              
       struct.pack('ii', l_onoff, l_linger)) 
    # send data here 
    s.close() 
+2

TCP, kapandığında bağlantıyı kesmesine neden olur; * bekleyen verileri * atın ve bir RST gönderin. – EJP

+3

Merak edenler için biraz daha fazla bilgi: SO_LINGER 0 saniyelik bir süre ile TCP yığınının kapanmadığı anlamına gelir(): herhangi bir istenmeyen veriyi yok eder ve bir FIN yerine bir RST gönderir. Daha fazla bilgi için [this] (http://developerweb.net/viewtopic.php?id=2982) ve [this] (http://www.pcvr.nl/tcpip/tcp_conn.htm) okuyun. –

+0

Microsoft Windows ortamında bu kodu kullanıyorsanız, 'hh' ile struct.pack() çağrısında 'ii' değiştirmeniz gerektiğini unutmayın. Windows, Linux'un inters kullandığı yapı sızmasında şort kullanır. –