テストするには、ラップトップからサイトにローカルSSHトンネルを設定し、ssh-server
サイトページをダウンロード(またはブラウザで確認)してこれを試しました。
トンネルは次のように作られています。
$ ssh -L 9999:www.gnu.org:80 ssh-server
トンネルがサーバー上のnc
プログラムやキャラクターとどれだけうまく機能するかを確認します。 ssh-serverとサーバーで~#
実行してhttpリクエストを実行できることを確認しました。どちらもエラーなしで実行されます。wget
lynx
しかし、wget --no-proxy localhost:9999
ラップトップで実行するとエラー403が発生します。
を使用して同じ操作を実行できますssh ssh-server 'wget -O - http://www.gnu.org/' >> whatever
。しかし、なぜトンネルが機能しないのですか?
それで、正確に何が起こっているのか、そしてどのようなものがプロキシによって許可されていないのかを調べようとしています。
私の考えでは、プロキシがSSHクライアントがhttp要求を実行するのを特に妨げているようです。そうですか?
それでは、プロキシはssh-clientと他のプログラムをどのように区別しますか? ssh-clientから送信された要求と他のプログラムから送信された要求を区別できますか?
「sshクライアントを他のプログラムで保護する」一般的な方法(またはプロキシを通過する他の方法)は何ですか?
ポリスチレン 誰かがSSHトンネルやその他の項目をテストするために開いている無料のSSHサーバーのアドレスをコメントに書き込んだ方がいいでしょう。 (通常、SSHサーバーは無料のトンネリングを許可しません。)
答え1
HTTPプロキシまたはSSHトンネルを設定していないか、使用しようとしませんでした。代わりに、SSHを介したポート転送を使用します。
TCP ポート転送は HTTP では機能しません。 HTTP URL にアクセスすると、2 つの異なるポイントで URL ドメインが使用されます。 1 - メッセージを送信するIPアドレスを探します。 2 - HTTPメッセージのホストヘッダに使用されます。これにより、IPアドレスは次のWebサイトにサービスを提供できます。多くの種類エリア。
したがって、にアクセスすると、http://localhost:9999/
HTTPメッセージにヘッダー行が含まれますHost: localhost:9999
。 GNU Webサーバーは名前付きウェブサイトを提供せず、localhost:9999
アクセスが拒否されます(403)。
(403は仕様に準拠しています。理論的には、403はやや非友好的であるため、メッセージ付きの400を好む必要があります。個人的には、通常のDynDNSサイトで403を使用しています。 . 私の Web サーバーが他の Web サーバーをブロックするのを拒否するのに十分強力です (例: DNS キャッシュの有効期限の場合)。
-D
便利な方法は、SOCKSプロキシを設定するSSH「ダイナミックポート転送」オプションを使用することです。残念ながら、wgetにはSOCKSプロキシオプションはありません(curl
しかし)。