2014-04-23 8 views
5

के साथ समस्याएं मैंने this article में उल्लिखित सिद्धांतों का उपयोग करके पायथन 3 में फ़ायरवॉल के लिए एक मूल टीसीपी छेद पंचर लिखने का प्रयास किया है। हालांकि, मुझे कनेक्ट करने के लिए कुछ भी परेशानी हो रही है।टीसीपी छेद पंचिंग

#!/usr/bin/python3 

import sys 
import socket 
import _thread as thread 

def client(): 
    c = socket.socket() 

    c.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) 
    c.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEPORT, 1) 

    c.bind((socket.gethostbyname(socket.gethostname()), int(sys.argv[3]))) 
    while(c.connect_ex((sys.argv[1], int(sys.argv[2])))): 
     pass 
    print("connected!") 
    thread.interrupt_main() 

def server(): 
    c = socket.socket() 

    c.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) 
    c.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEPORT, 1) 

    c.bind((socket.gethostbyname(socket.gethostname()), int(sys.argv[3]))) 
    c.listen(5) 
    c.accept() 
    print("connected!") 
    thread.interrupt_main() 

def main(): 
    thread.start_new_thread(client,()) 
    thread.start_new_thread(server,()) 

    while True: 
     pass 

if __name__ == '__main__': 
    main() 

मैं अपने स्थानीय मशीन पर पंचर की कोशिश करने के लिए इतना है कि मैं सभी यातायात दोनों मामलों द्वारा भेजे ले सकता है फैसला किया: यहाँ कोड है।

left$ ./tcphole.py localhost 20012 20011 

और

right$ ./tcphole.py localhost 20011 20012 

मैं करने के लिए Wireshark कि SYN पैकेट हैं अनुसार देख सकते हैं:

iptables -A INPUT -i lo -m state --state RELATED,ESTABLISHED -j ACCEPT 
iptables -A INPUT -i lo -j DROP 

तो मैं स्क्रिप्ट की दो प्रतियां का शुभारंभ: मैं पहली बार एक लूपबैक फ़ायरवॉल की स्थापना दोनों तरीकों से प्रसारित किया जा रहा है:

Wireshark capture

लेकिन कुछ भी कभी भी "कनेक्ट" प्रिंट नहीं करता है! मैं क्या गलत कर रहा हूं?

+0

रुको, क्या आपके फ़ायरवॉल नियम नहीं होंगे (विशेष रूप से, नियम # 2) 'लो' पर आने वाले' SYN' पैकेट ड्रॉप करें? आपके उदाहरण में कोई "स्थापित" या "संबंधित" कनेक्शन नहीं हैं, है ना? – NPE

+0

हां, यह वही व्यवहार है जो मैं आसपास काम करने की कोशिश कर रहा हूं। (फ़ायरवॉल इस मामले में विरोधी है।) एसईएन पैकेट को संबंधित के रूप में पहचाना जाना चाहिए, हालांकि इसे वापस करना चाहिए। – thirtythreeforty

+0

और थोड़ी देर के लिए मैंने देखा है कि सबसे पूर्ण और स्पष्ट रूप से स्पष्ट प्रश्नों में से एक के लिए धन्यवाद। (+1) – NPE

उत्तर

3

उत्तर काफी सरल साबित हुआ: पैकेट RELATED नहीं माना जाता है अगर वे एक ही आईपी पते पर नहीं आ रहे हैं!

('' लूपबैक पता करने के लिए बांधता)

c.bind('', int(sys.argv[3]))) 

को bind लाइनों को बदलने से पूरी तरह से समस्या का समाधान होता।

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