sudo を使用しても、-O オプションで nmap を実行できないのはなぜですか?

sudo を使用しても、-O オプションで nmap を実行できないのはなぜですか?

自分のマシンで使用されているポートを特定しようとしています。オンラインで、次のような方法を記載した記事を見つけました。

$ sudo nmap -sT -O localhost

これによって、TCP パケットをリッスンしているすべてのポートのリストが得られると信じていました。しかし、このコマンドを入力すると、次の結果が得られます。

Starting Nmap 7.91 ( https://nmap.org ) at 2021-06-02 21:07 EDT
socket troubles in HostOsScan: Permission denied (13)

sudo として実行している場合、マシン上で何かを実行する権限がなくなるのはなぜですか?

実行してみました:

$ sudo nmap -sT  localhost

そして次のようになりました:

Starting Nmap 7.91 ( https://nmap.org ) at 2021-06-02 21:28 EDT
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000094s latency).
Not shown: 999 closed ports
PORT    STATE SERVICE
631/tcp open  ipp

引数なしで試したところnmap、再び許可が拒否されました!?

$ sudo nmap localhost
Starting Nmap 7.91 ( https://nmap.org ) at 2021-06-03 11:05 EDT
Couldn't open a raw socket. Error: Permission denied (13)

オプションを見るとnmap's --help、OS 検出が有効になっていることがわかります-O。特に では、このオプションを使用する権限がないのはなぜですかsudo? (注: 現在、Ubuntu 18.04 と 20.04 を実行しています)

(注: 承認された回答は、ポートを確認するという私の根本的な問題を解決しますが、コメント セクションの回答では、 で問題が発生した理由が説明されていますnmap。どうやら、 でインストールしたためsnap、以下も実行する必要がありました。

 $ sudo snap connect nmap:network-control

以前はnmap正常に動作していた

答え1

マシンで使用されているポートを判別したい場合は、スキャンする必要はありません。ポートを直接リストするだけで済みます。

netstat -nap
ss -nap

ルート権限がない場合は-pフラグを省略してください。これらのLISTEN行はあなたにとって重要なものであり、 でフィルタリングできますawk。たとえば、

netstat -nap | awk 'NR==1 || /LISTEN/'

答え2

まず「自分のマシンでどのポートが使用されているかを確認しようとしています。」と記述し、その後、ローカル OS が何であるかを知る必要がないため、-O を削除します。

さらに詳しい情報が必要かもしれません。

  1. どのOSを稼働していますか?カーネルも含めるとよいでしょう
  2. ファイアウォール、Fail2ban、または関連するセキュリティ サービスを実行していますか?
  3. 古いバージョンをインストールできますか? Ubuntu リポジトリの Nmap v7.80 にインストールしても、同じ問題は発生しませんでした。
  4. 仮想マシン、VPS、またはホスト型システムを使用していますか?
  5. これは、プログラムがほとんどまたはまったくインストールされていないクリーン インストールですか? その場合、システムは静かで、ノイズもほとんどなく、検出するものもほとんどありません。
  6. 他の OS 検出 Nmap オプションを試しましたか? --osscan-limit --osscan-guess --max-os-triesリンク

検出されたTCPポートが不足するとOS検出が困難になります。TCPリクエストへの応答がOS検出の仕組みです。こちらで詳しく説明されています。https://nmap.org/book/osdetect-methods.html

関連情報