2016-09-29 13 views
1

クライアントとサーバの間の通信の途中で管理されていると仮定します(ホットスポットを開いてクライアントが私のマシン)。MITMとしてscapyを使ってパケットを即座に変更する

他のサービスとの通信を中断することなくクライアントが送受信するパケットを変更するにはどうすればよいですか?クライアントが送信し、受信しようとしている(スクリプトを転送する前に)すべてのパケットをスクリプトでルーティングする方法が必要です。

これを達成するための正しい方向は、iptablesであると思いますが、どのような議論がこの仕事をするのに適しているのか正確にはわかりません。 - 私は、クライアントが送受信するすべてのものを見ることができます

hotspotd start #a script that runs dnsmasq as both a DNS and DHCP server, configures and starts a hotspot 
iptables -P FORWARD ACCEPT 
iptables --append FORWARD --in-interface wlan0 -j ACCEPT 
iptables --table nat --append POSTROUTING --out-interface eth0 -j MASQUERADE 
#wlan0 is the interface on which the hotspot is. 
#eth0 is the interface that is connected to the internet 

さて、これは完全に受動的なMITMの作品:私はすでに、次の単純なスクリプトを持っています。しかし、今私はそれをステップアップし、私が送受信するすべてのメッセージをリダイレクトしたいと思います。

私の最終的な目的は、私は次のスクリプトを実行することができるレベルに到達することです:私は、すべてのクライアントをパケットリダイレクト達成するにはどうすればよい

from scapy.all import * 
from scapy_http.http import * 

def callback(pkt): 
    #Process the packet here, see source and destination addresses, ports, data 
    send(pkt) 

sniff(filter='port 666', prn=callback) #Assuming all relevant packets are redirected to port 666 

が送信している-程度ツー受けますか?

答えて

1

NFQUEUEpython bindingsです。

NFQUEUEは有効なiptablesターゲットであるユーザースペースキューです。あなたはNFQUQUEにいくつかのトラフィックをリダイレクトすることができます

iptables -I INPUT -d 192.168.0.0/24 -j NFQUEUE --queue-num 1

次に、あなたのコードからのパケットアクセス:

from netfilterqueue import NetfilterQueue 

def print_and_accept(pkt): 
    print(pkt) 
    pkt.accept() 

nfqueue = NetfilterQueue() 
nfqueue.bind(1, print_and_accept) 
try: 
    nfqueue.run() 
except KeyboardInterrupt: 
    print('') 

nfqueue.unbind() 

pkt.accept()コールを。これはnfqueueにverdictを返し、パケットを受け入れるべきであることを伝えます。つまり、カーネルの通常のルートに沿ってパケットを受け入れるべきです。パケットを変更するには、acceptの代わりに、パケットをコピーし、dropの判定結果を返し、最後に含まれている変更を加えて再送信する必要があります。

+0

と思われます。しかし、どのパケットがデバイスからで、どのパケットが私のマシンからであるのかをどのように認識しますか? –

+0

これにはiptablesまたはあなたのアプリを使うことができます。 1. IPテーブルを使用すると、パケットをソースでフィルタリングし、関連するものだけをnfqueueに送信できます(または、ソースに応じて2つの別々のNFQUEUESに送信できます)。 2.アプリケーションはNFQUEUEからパケット全体を受信するため、受信した各パケットのIPアドレスを確認するだけです。 – Malt

+0

ですが、それは後の段階で決定されていませんか?私はパケットがローカルIPアドレスから供給されていることを意味します。彼らは私の外部のIPに到着し、そのような偉大な作品ですか? –

関連する問題