2016-08-11 21 views
2

私はlocalhost上でapache2を実行しています。私はlocalhostからhttp要求を傍受して変更したいと思っています。変更することで、ヘッダーのAccept-Encoding属性を 'identity'に変更します。 Burp-Suiteを使用すると、うまく動作します。しかし、私のscapyスクリプトを使用すると、http応答がまだエンコードされているので、パケットはすでに送信されているようです。Python Scapy - ローカルホスト上でhttpパケットを傍受して変更する

scapyスクリプトは:

from scapy.all import * 

def intercept(pkt): 

    if pkt.haslayer(Raw): 
     http_content = pkt.getlayer(Raw).load 

     http_content = http_content.replace("Accept-Encoding: gzip, deflate", "Accept-Encoding: identity") 
     pkt[Raw].load = http_content   
     print pkt.show() 
     send(pkt) 

def main(): 
    sniff(iface='lo', filter='tcp port 80', prn=intercept) 

if __name__ == '__main__': 
    main() 

これは私が応答として戻って得るものです:エンコードされている

<skipped> 
###[ Raw ]### 
      load  = 'HTTP/1.1 200 OK\r\nDate: Thu, 11 Aug 2016 09:34:38 GMT\r\nServer: Apache/2.4.23 (Debian)\r\nLast-Modified: Thu, 11 Aug 2016 09:34:25 GMT\r\nETag: "7d-539c878b8f8fd-gzip"\r\nAccept-Ranges: bytes\r\nVary: Accept-Encoding\r\nContent-Encoding: gzip\r\nContent-Length: 103\r\nConnection: close\r\nContent-Type: text/html\r\n\r\n\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\x03\xb3\xc9(\xc9\xcd\xb1\xe3\xb2\xc9HML\xb1\xe3RPP\xb0)\xc9,\xc9I\xb5\xf3H\xcd\xc9\xc9W\x08\xcf/\xcaI\xb1\xd1\x87\x08q\xd9\xe8CT\xd9$\xe5\xa7TB\x14g\x18!\xabT\x04\xaa0\x82H\[email protected]\xc5\x13\xd3\x133\xf3\xf4\xf4\xf4l\xf4\[email protected]\[email protected]\x02\x95\x81m\x05\x00\x1c\x95F\x1d}\x00\x00\x00' 

誰かが助けることができますか?

+1

バンプスイートはプロキシですが、スカッフィーはありません。 localhostはネットワーク遅延のない特別なインターフェースです。インターセプトとリプレイは、ローカルホストでは機能しません(ほとんどの場合)。 – grochmal

答えて

2

私がscapyを知っている限り、あなたのシステムによって既に作成されたパケットを変更することはできません。もちろん、パケットを作成し検査することはできますが、すでに作成されたパケットは変更できません。 正しく指摘されている通りhere ScapyはパケットをホストのIPスタックに干渉することなくスニッフィングします。 しかし、Linuxではscapynfqueueモジュールを組み合わせることができます。 nfqueueモジュールを使用すると、特定のiptablesルールを満たすパケットを(scapyを使用して)変更できます。

関連する問題