web-dev-qa-db-ja.com

Webサーバーをスキャンする最も効率的な方法

ポート80で実行されているWebサーバーの大量のIPアドレスをスキャンしたいとします(たとえば、Webサーバーには他のポートがあることを認識して、無視します)。

これを行う最も効率的な方法は何でしょうか?

ここにいくつかのオプションがあります:

1)nmapの複数のインスタンスを同時に実行するbash/pythonスクリプトを実行し、1つのポートのみをスキャンします。コマンドは次のようになります。

nmap --append-output -oG output.txt -p 80 -Pn -sS xxx.xxx.xxx.xxx (ip address) &

2)各IPアドレスに対してGETリクエストを試行するpythonスクリプトを作成します(複数のインスタンスを同時に実行します)

基本的に、私の質問は次のとおりです:これらのオプションのいずれかが最も速い方法ですか、または私が考えていないより速い方法がありますか、また、pythonスクリプトまたはリクエスト、メモリフットプリントなどの面で多くのオーバーヘッドがあります。

ボーナス思考

私の頭を越えたアイデアは、各IPアドレスでNSLLOKUPを実行するbash/pythonスクリプトを実行することでしたが、これはDNSが構成されていないWebサーバーを提供せず、プラス側は送信せずにスキャンしますネットワークへのパケット

2
pzirkind

この問題を正確に解決するための最適化を実装した大規模なスキャン用に作成されたツールがあります。最もよく知られ、最も開発されたオプションの1つは masscan です。 10 MPPS(100万パケット/秒)の速度に到達でき、IPv4インターネット全体を約6分でスキャンできます。また、インターネット全体をスパムすることなくローカルネットワークでベンチマークを行うことができるフラグも付いています。

もちろん、それはそれを維持できるインターネット接続を前提としています。自宅からスキャンする場合は、ギガビットインターネットを使用している場合を除いて、そのパフォーマンスの近くには期待できません。

1
David

Nmap自体は、単純なNSEスクリプトを使用して効率的に、要求されたすべてを実行できます。

  • 多数のサーバーをスキャンしてポート80を探す:nmap -p80 -PS80 --open
  • 各ルートページに対してGETリクエストを実行します:--script http-fetch --script-args 'maxpagecount=1,destination=/tmp/files。これは残念ながら 複数のターゲットではうまく機能しません Nmap 7.60ですが、そうするための修正はそれほど多くありません。他のスクリプトでは http-grep 、または http-headers に興味があるかもしれません。
  • 各アドレスのNSLOOKUP:これは不特定ですが、Nmapで実行できます:
    • 逆引きDNS(PTRレコード)ルックアップ。-nを使用しない限り、デフォルトで実行されます。これがallである場合は、-sLを使用して「リストスキャン」を実行します。
    • ホスト名/ドメインの前方参照。 Nmap必要に応じてこれを行いますが、これで十分であれば、-sL -nを使用します。
3
bonsaiviking