0

C でポート スキャナーを作成しています。開いているポートで実行されているサービスとそのバージョンを検出したいと考えています。
私はすでにスキャナーコードを書いていますが、実行中のサービスを検出する方法がわかりません。
私に何ができる?

4

2 に答える 2

4

独自のコードで実行する場合は、ポートに接続し、データが取得されているかどうかを確認します。データがない場合は、数バイトを送信して、もう一度確認します。

次に、それを期待される応答と照合します。

探しているものがわかるように、telnetを使用して手動でポートに接続し、それを突くことができます。多くの場合(Webサーバーは簡単な例です)、使用可能な応答を取得するには、正しくフォーマットされたデータを送信する必要があります。

nmapは、これだけでなく、さらに多くのことを実行しました(たとえば、バイトオーダーの検索やarpトラフィックのタイミングなどの広範なチェック)

更新:よく知られているポートについて言及している人もいますが、カスタムポートで実行されているsshサーバーやhttpサーバーなど、非標準ポートで実行されている標準サービスを見つけるのに役立ちません。

于 2013-03-08T21:28:06.663 に答える
1

サーバーが最初に何かを送信する場合は、それを使用してプロトコルを識別します。

そうでない場合は、http などのプロトコルに従って何かを送信し、サーバーが返すもの (有効な応答またはエラー) を確認します。さまざまなプロトコルで何度か試行する必要がある場合があります。接続数を最小限に抑えるには、適切な順序が重要です。

一部のプロトコルは識別が非常に難しい場合があり、知らない独自のプロトコルを使用してカスタム サーバーを作成することは簡単です。また、http などの他のプロトコルの単純な偽のサーバーの下に実サーバーを隠すことさえできます。

ポートが通常何であるかを知りたいだけの場合は、「よく知られているポート」と公式に予約されているポートを確認してください。

nmapソース コードも確認してください。

于 2013-03-08T21:30:10.110 に答える