私はnmapを初めて使用し、最近、現在のLAN上のいくつかのデバイスをスキャンして、実行中のソケットプログラムによって開かれているポートを探しています。
最初に、マシンのポート55555で単純なUDPサーバーを実行し、次のオプションを使用してlocalhostをスキャンしました。
nmap -sT -sU -d -d localhost
(知っている -sT
はこのケースでは役に立ちませんが、すべてのトライアルで試しました)
ポート55555が閉じていることが示されています。サーバープロセスを終了しましたが、まだポートが閉じています。
NmapでTCP/UDPソケットポートをスキャンできるかどうかわかりません。 nmapまたは他のツールでそれを行うことは可能ですか?
私はあなたがTCP/IPを完全に理解し、相互接続がどのように行われ、完全にフィルタリング/ブロックされるかを理解するべきだと思います。まず、-sT(TCP接続)は、完全なハンドシェイクを完了するため、最も信頼できるタイプの接続です。 NMAPの出力は、ターゲットにフィルタリング/ファイアウォールがあるかどうかに関係なく、スキャン対象によって異なります。システムで開いているポートを確認する簡単な方法があります。これはnetstatと呼ばれます。いずれかのマシンにログインすることで、それらのマシンでnetstatを実行して、何が確立されているかを確認したり、リスニングしたりできます。これにより、ポートを使用したアプリケーションのより正確な画像が得られます。 (たとえば、何らかの理由でポート21をhttpサーバーに割り当てた場合、FTPを実行していると想定した場合と比べて、ポート21が表示されます)。
しかし、出力を見ることについてのあなたの質問に戻ります。ここには2つのビューがあります(localhostと入力した場合)... LANの外部のユーザーが表示するのに対して、YOUは表示されます。 Linux/BSDシステムを使用している場合は、nmapを実行する必要はありません。 LSOFを使用できます。
$ Sudo lsof -i -n | awk '{print $1"\t"$8"\t"$9}'
これにより、使用中のすべてのネットワークベースのソケットが表示されます。しかし、nmapを引き続き使用する場合は、nmapがデフォルトでどのように機能するかを理解する必要があります(たとえば、デフォルトでnmapは1000の最も一般的なポートしかスキャンしないため、検索されるポートの数です。たとえば、ポート24681で実行されているサービスは表示されません。それは珍しいです)。
しかし、それでもnmapを使用したいとします。私はあなたが試して完全なビューを取得することをお勧めします:
nmap -sT -Pn -T2 -vvv -A -p 1-65535ローカルホスト
これは正常に動作し、ローカルでしばらく時間がかかります[〜#〜] not [〜#〜]非ローカルホストに対してはうまく機能します。これは、すべてのネットワークが同じではないためです。たとえば、ネットワークがVLAN、PVLAN、またはIPS/IDS /ファイアウォールなどで分離/交差している場合、応答が異なる場合があります。たとえば、スイッチにいくつかのクリエイティブACLがある場合、スイッチが傍受し、NMAPスキャンに応答することがあります(ターゲットではありません)。これは通常、あたかもすべてのポートが開いているかのようにターゲットが応答する場合に当てはまります。
概要:マシンで何が実行されているかを確認するには、マシンにログインし、lsofやnetstatなどを使用することをお勧めします。ネットワークをローカルで(同じサブネット上で)テストしている場合は、さまざまなサービス(TCP/UDP)、タイミング(低速または高速/非常識スキャン)、ポートなどをいじる必要があるかもしれません。
「ローカルホストソケットを一覧表示する」のか「TCP/UDPポートをスキャンする」のかを理解できません。2番目の意味(スキャン)のためにこの投稿を作成します
サーバーがUDP 55555をリッスンしている場合、TCPハンドシェイクに依存するため、-sT(TCPスキャン)または-sS(TCP Synステルススキャン)を使用しても意味がありません。(Syn-Syn/Ack-Ack)munkeyotoによって提案されているように、スキャンが何を行うかを理解するためにプロトコルがどのように機能するかを確認する必要があります(推奨される書籍:「実用的なパケット分析」または「Nmapネットワーク探索」)。また、Windowsは自分のマシン(localhost)のSYN Stealth Scanでのスキャンをサポート
UDPスキャンは、空の(データなし)UDPヘッダーをすべてのターゲットポートに送信することで機能します。応答またはその欠如に基づいて、ポートは次の4つの状態のいずれかに割り当てられます。
UDPポートスキャンの信頼性を向上させる良い方法は、バージョン検出(別名、サービスフィンガープリント-sV)を使用することです。
UDPポートをスキャンするには、次を使用します。
$ Sudo nmap -sUV <targetIP> -p 55555
複数のポートをスキャンする場合は、スキャンに大幅に時間がかかります。 ( https://nmap.org/book/man-performance.html を参照します)
この投稿全体がわかりにくい場合は、上記の2冊の本を読むことをお勧めします。スキャン技術には、TCP、UDP、ICMP、およびその他のプロトコルに関する特定の知識が必要です。
TCPスキャンの場合、Bash Shellとそのネットワーク pseudo-device files を使用できます。
for port in {1..65535}; do
timeout 1 bash -c "</dev/tcp/localhost/$port" 2> /dev/null && echo Port $port open. || echo Port $port closed.
done