2012-04-05 11 views
3

scapyでパケットデータを変更するにはどうすればよいですか?scapyでパケットデータを変更するには?

私はsniff()を使用して、次にsend()を編集しようとしましたが、元のパケットがすでに宛先に達しているため動作しません。

答えて

2

"元のパケットがすでに宛先に到達しているため、動作しません。

まず最初に、両端にあるすべての通信がデバイスを横断するように、いくつかのMiTMソリューションをセットアップし、パケットデータを変更できるようにします。

この機能/攻撃の既知のソフトウェアパッケージには、ettercapとcain/abelがあります。

3

iTayb、

あなたがscapyを使用して、サービスのいくつかの並べ替えをプロキシに興味があるようですか?もしそうなら、どちらですか?

最初の注文は、パケットがscapyを実行しているボックスをどのように通過するかです。これを行うには、リモートマシンのゲートウェイをscapyボックスと一致するように設定します。これがある種のペンステストのためのものなら、いくつかのMACアドレスを偽装する必要があります。 arpcachepoisonメソッドを使用するか、ettercapのような第三者プログラムを使用してscapyでこれを行うことができます。

これが完了したら、sniff()とsend()を使用する方法は、送信側に到達する前にパケットを変更するだけです。)次に、それは...ここで私はちょうどIPヘッダー宛先アドレスを変更しますが、あなたはあなたが望むものを変更することができます。

from scapy import * 

def chgSend(x): 
    x[IP].dst = '192.168.1.1' 
    send(x) 
while 1: 
    sniff(prn=chgSend) 

DC

+0

私は、これは少し古いスレッドが、同様のものである知っている - 1は、より多くので発信パケットを変更することはできます複雑な方法? IPヘッダーやTCPヘッダーを変更せずに、httpペイロードに別の種類のhttpヘッダーを挿入するなど。関連APIへの参照など – fayyazkl

+0

しかし、あなたが変更したいことに応じて、それは他のモジュールを含むかもしれません。たとえば、すべてのHTTP GET要求パケットのペイロードを変更したい場合は、reを使用してヘッダを解析し、それに応じて変更されたパケットを送信します。 – dc5553

+1

実際には新しいhttpヘッダーを挿入します。これは最後の\ r \ nを上書きし、さらにいくつかのフィールドを追加することを意味します。 – fayyazkl

2

私は、

を同じ問題を抱えていた私はこの問題は、変更されたパケットがscapyによって送信される前に、元のパケットは元の宛先に転送されるように、あなたがip_forwardを有効にしているということだと思います。

Theorically、解決策は、あなたが別のポートに変更したいパケットを転送するiptablesの中でルールを作成することです(これはettercapのは、内部的行い、多かれ少なかれものです)、

 i.e = iptables -t nat -A PREROUTING -p tcp --destination-port "YourInterestingPort" -j REDIRECT --to-port 1234 

そしてscapyに聞きますそのポートにパケットを変更し、パケットを元のポートに送信します。

このソリューションでは、フィルタリングの、あなたはリダイレクトし、必要なパケットのみを変更し、SYN ACK ARPなど除外する必要があるため、サーバーの応答を変更したい場合は...

を実現することは困難です、それを行うもっと簡単な方法は、その場でパケットを変更する代わりに、仲介者のように行動することです。

  • arpspoof ipatbles
  • オープンソケット、パケットを受信し、接続を開き、あなたがクライアントだったとの回答を受けた場合のように、元の宛先に送信し、答えを変更し、それを返します元のクエリアに。

    真: c、addr = s_mb.accept()#クライアントとの接続を確立します。 クエリ= c.recv(BUFFER_SIZE)

    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
        s.connect((IP, PORT)) 
        s.send(PACKET) 
        response = s.recv(1024) 
        if response = "THIS IS THE RESPONSE THAT I WANT TO MODIFY": 
        if(real_simulation): 
         fakeresponse = "MODIFIED RESPONSE" 
         #print "The packet has beeb modified" 
         else: 
         fakeresponse = response 
        s.close()  
        c.send(fakeresponse) 
    

(汚いコードについて申し訳ありませんが)

関連する問題