4

Qt アプリケーションによって送受信される生のパケット データにアクセスして改ざんする方法を探していましたが、何も見つかりませんでした。方法はありますか?または、アプリケーションではない場合、少なくとも QWebView からパケット データにアクセスする方法。

上記の2つのいずれかを達成する方法はありますか?

4

4 に答える 4

3

すみません、サム、私はそれを機能させることができません。私は想像できるすべてのことを試みてきましたが、それが望まれていたように何も起こりません。

オプションの簡単なリストと、実行できることと実行できないことを作成しましょう。

  • QWebFramewithを取得してから、、、、などのwebView->page()->currentFrame()メソッドにアクセスすることで、取得したWebページにアクセスできます。これらの機能により、ウィジェットに表示されているWebページを動的に変更することができます。setContents()setHtml()toHtml()toPlainText()

  • スロットreply->readAll()内のメソッドを使用して、各要求に対して受信した生の応答(バイトの配列として)にアクセスできます。replyFinished()

  • QNetworkAccessManager::createRequest()独自のネットワークアクセスマネージャでメソッドをオーバーライドすることにより、リクエストをインターセプトすることができます。そこで、リクエストで送信されたURLとヘッダーにアクセスして、それらを変更したり、リクエストをキャンセルしたりできます。

しかし...あなたはリクエストと各リクエストの返信データにアクセスしたいと思っています。

createRequest()リクエストへのアクセスは簡単です。カスタムのメソッドへのオーバーライドによってすでに説明されていますQNetworkAccessManager。しかし、他の部分について話しましょう:

  • 私が見たところ、リクエストから取得した応答は読み取り専用であり、のソースコードにハードコードされているため、変更できませんQNetworkReply

  • の関数は、単純に実行するようにハードコードされているため、使用できません。writeData()QNetworkReplyreturn -1

  • 独自のサブクラスを作成して、カスタムのメソッドでQNetworkReply返すことができます。関数、、、およびをオーバーライドする必要があります。不思議なことに、このメソッドは、リクエストがHTTP以外の宛先に対して行われた場合にのみ機能します。の内部は、使用されるプロトコル(HTTP、FTPなど)に応じて異なる実装を呼び出すと思います。したがって、これはある意味では機能しましたが、私たちが望む方法では機能しませんでした。このメソッドは、たとえば、特定の条件下で事前定義されたWebページを返すために使用できます。createRequest()QNetworkAccessManagerreadAll()bytesAvailable()abort()QNetworkAccessManagerQNetworkReply

  • QNetworkAccessManager::createRequest()オブジェクトを返さなければならないという事実を考慮するQNetworkReplyと、応答されたバイト配列の改ざんを許可するサブクラス化の組み合わせは見当たりません。それは本当によく保護されており、目標を達成できるようにするには、これらのクラスのすべてを再実装する必要があります。ほとんどすべての部分のソースクラスをコピーして貼り付け、QtNetwork独自の実装を作成します。

ですから、答えは「いいえ、あなたが尋ねたとおりに正確に行うことはできないようです。部分的にしかできません」と思います。

ごめん。

于 2012-06-06T21:41:14.430 に答える
0

...そして、プロキシサーバーはどうですか? おやすみなさいの睡眠は、私にこの可能性を考えさせました.

ループバックの例トレント クライアントの例などに従って作成できます。したがって、リクエストと返信 をキャプチャして改ざんできます。

QWebViewを使用して、クライアントでプロキシを構成できますwebView->page()->networkAccessManager()->setProxy()。 

これには、目的のポート (8080 など) をリッスンし、ローカルホストの接続をリッスンするプロセスの構築が含まれます。 

次の方法でプロキシのプロトコルを実装する必要があります。

  1.  GET および POST 操作を分析すると、
  2.  リクエスト全体をバイナリ転送として受け取り、
  3.  リクエストを改ざんし、
  4.  取得したリクエストを宛先IPへの接続で送信し、
  5.  次に、返信をキャプチャできます。
  6.  受信した返信を改ざんし、
  7.  結果の応答をクライアント webView に送信します。

ここでは経験はありませんが、道は明らかです。それは多くのコーディングになりますが、唯一のオプションではないにしても、これは本当に良いオプションだと思います. 

さらに重要なことは、それができるということです。

于 2012-06-07T08:58:10.227 に答える