2011-06-22 15 views
13

मैं एक ftp-server से कनेक्शन बनाने के लिए पायथन के socket.py का उपयोग कर रहा हूं। अब मैं कनेक्शन रीसेट करना चाहता हूं (एक आरएसटी ध्वज भेजें) और ftp-server की प्रतिक्रिया सुनें। (एसओएस.एंड ('', 'आर') का उपयोग कर एफवाईआई काम नहीं करता है क्योंकि ओएस आरएसटी के बजाय एफआईएन फ्लैग भेजता है।)टीसीपी/आईपी सॉकेट कनेक्शन में रीसेट भेजना

+1

तुम क्यों कनेक्शन रीसेट करना चाहते हैं? – EJP

+3

एक दुर्भावनापूर्ण ftpclient – Anvay

+0

को दोहराने का क्या मतलब है "कनेक्शन रीसेट करें"? टीसीपी/आईपी 'आरएसटी' ध्वज के रूप में? –

उत्तर

0

यदि आप कनेक्शन पर अपना व्यवहार लागू करना चाहते हैं तो मुझे लगता है कि आपको Scapy का उपयोग करने का प्रयास करना चाहिए। यह वास्तव में उपयोगी पुस्तकालय/उपकरण है। यह आपको आईपी/टीसीपी/यूडीपी/आईसीएमपी पैकेज के साथ खेलने देता है।

1

एक टीसीपी कनेक्शन पर एक आरएसटी भेजने के लिए, शून्य समय के साथ SO_LINGER विकल्प true पर सेट करें, फिर सॉकेट बंद करें। यह कनेक्शन रीसेट करता है। मुझे नहीं पता कि पाइथन में ऐसा कैसे करें, या वास्तव में आप इसे भी कर सकते हैं या नहीं।

24

SO_LINGER सॉकेट विकल्प चालू करें और अदरक का समय 0 सेकंड पर सेट करें। यह बंद होने पर कनेक्शन को निरस्त करने के लिए टीसीपी का कारण बनता है, डेटा फ्लश करता है और एक आरएसटी भेजता है। यूएनपी में सेक्शन 7.5 और उदाहरण 15.21 देखें।

अजगर में:

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

यह बंद होने पर कनेक्शन को निरस्त करने के लिए टीसीपी का कारण बनता है, * किसी लंबित डेटा को फेंक देता है, और एक आरएसटी भेजता है। – EJP

+3

उन उत्सुक लोगों के लिए बस कुछ और जानकारी: 0 सेकंड के समय के साथ SO_LINGER का मतलब है कि टीसीपी स्टैक निकट() पर "चारों ओर" नहीं रह जाएगा: यह किसी भी असंतुलित डेटा को छोड़ देगा और एक एफआईएन के बजाय आरएसटी भेज देगा। अधिक जानकारी के लिए [यह] पढ़ें (http://developerweb.net/viewtopic.php?id=2982) और [यह] (http://www.pcvr.nl/tcpip/tcp_conn.htm)। –

+0

ध्यान दें कि यदि आप Microsoft Windows वातावरण में इस कोड का उपयोग कर रहे हैं तो आपको 'ii' को कॉल में struct.pack() से 'hh' के साथ प्रतिस्थापित करने की आवश्यकता है। विंडोज स्ट्रक्चर अदरक में शॉर्ट्स का उपयोग करता है, जहां लिनक्स इनट्स का उपयोग करता है। –

संबंधित मुद्दे