1

Facebookにログインできるスクリプトをインターネットで見つけましたが、これはうまく機能しますが、別のWebサイトでログインしようとすると、500エラーが発生します。

    Dim cookieJar As New Net.CookieContainer()
    Dim request As Net.HttpWebRequest
    Dim response As Net.HttpWebResponse
    Dim strURL As String = "http://xtract.basdistributie.nl:4040/Account/LogOn"

       Try 
        request = Net.HttpWebRequest.Create(strURL)
        request.UserAgent = "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0)"
        request.Method = "GET"
        request.CookieContainer = cookieJar
        response = request.GetResponse()

        For Each tempCookie As Net.Cookie In response.Cookies
            cookieJar.Add(tempCookie)
        Next

        'Send the post data now
        request = Net.HttpWebRequest.Create(strURL)
        request.UserAgent = "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0)"
        request.Method = "POST"
        request.AllowAutoRedirect = True
        request.CookieContainer = cookieJar

        Dim writer As StreamWriter = New StreamWriter(request.GetRequestStream())
        writer.Write("username=???????&password=????????")
        writer.Close()

        response = request.GetResponse()

        'Get the data from the page
        Dim stream As StreamReader = New StreamReader(response.GetResponseStream())
        Dim data As String = stream.ReadToEnd()
        response.Close()

        If data.Contains("BAS Distribution Xtract") = True Then
            MsgBox("ingelogd")
        End If
        MsgBox(data)
    Catch e As Exception
        If TypeOf e Is WebException AndAlso DirectCast(e, WebException).Status = WebExceptionStatus.ProtocolError Then
            Dim errResp As WebResponse = DirectCast(e, WebException).Response
            ' read the error response
            Using respStream As Stream = errResp.GetResponseStream()
                MsgBox(e.ToString)
            End Using
        End If
    End Try

エラー メッセージは、response = request.GetResponse () の場所を見つけます。また、Fidler を使用してより適切なエラー メッセージを取得しようとしましたが、これを使用したことはありません。ウェブサイトが.net の代わりに asp に組み込まれている場合、これは True? です。

すべての助けに感謝

4

1 に答える 1

1

Facebook のログイン メカニズムがこの他のサイトで機能しない理由は、おそらく同じログイン フォーム パラメータを持っていないためです。

進め方は次のとおりです(現時点では正確な回答はできませんが)。

  1. ブラウザを使用して、ログインする Web サイトに移動します
  2. ログイン フォームの HTML を調べて、実際のパラメータ名を取得します。たとえば、このサイトでは「username」などの代わりに「uname」を使用する場合があります。
  3. コードを編集して、フォームの各入力の値を POST します

これが機能しない場合:

  1. HTTP トラフィックを表示できるように、WireShark などをインストールします。
  2. ブラウザでウェブサイトに移動します
  3. ブラウザでログインし、wireshark を使用してログイン リクエストを表示します。POST 変数の名前と値、およびヘッダー情報に特に注意してください。
  4. 必要に応じてスクリプトを更新します

ステップ 4 でサポートが必要な場合は、投稿を編集してステップ 3 の情報を含めてください。

ワイヤーシャーク

以下は、ここでのwiresharkの使用方法に関する簡単な説明です. フィルタリングなどについては詳しく説明しません。目でフィルタリングできます :P

Wireshark を開くと、インターフェースのリストが表示されます。ステップ 1 はインターフェイスを選択することです...

  • wifi 経由で接続している場合は、wlan インターフェイスのいずれかを選択します。うまくいけば、1つだけです。それ以外の場合は、試行錯誤に頼って正しいものを取得できます
  • ネットワーク ケーブル経由で接続している場合は、eth0 を選択します。うまくいけば、1つだけなどがあります。

インターフェイスのリストが表示されない場合は、ウィンドウの左上にプリンタのようなアイコンが表示されます。それをクリックすると、インターフェイスを選択できます ([開始] をクリックしてキャプチャを開始します)。

Web サイトに (ブラウザを使用して) ログインし、赤い x が付いたアイコンをクリックして、キャプチャをすぐに停止します。

次に、正しいパケットを見つける必要があります...

関心のあるプロトコルは HTTP です。アクセスしているドメインの名前が情報列に表示される場合があります。今のところ、私はそうであると仮定するつもりです。コメントとしてそう言わないだけなら。また、SSL が表示される場合、これは役に立たない可能性があります。私はまだsslについてあまり詳しくありません...

これで、Web アプリに送信したパケットを特定できるようになりました。POST と表示されているものを見つけて、その中身を確認します。それがあなたのログイン情報であれば、それは勝利です。

関連すると思われるすべての情報に注意してください。

アプリケーションを使用してプロセス全体を繰り返してログインを試み、そのログイン パケットを見つけると、違いを見つけることができます。

于 2012-11-14T13:40:26.617 に答える