自分のマシンで使用されているポートを特定しようとしています。オンラインで、次のような方法を記載した記事を見つけました。
$ 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 を削除します。
さらに詳しい情報が必要かもしれません。
- どのOSを稼働していますか?カーネルも含めるとよいでしょう
- ファイアウォール、Fail2ban、または関連するセキュリティ サービスを実行していますか?
- 古いバージョンをインストールできますか? Ubuntu リポジトリの Nmap v7.80 にインストールしても、同じ問題は発生しませんでした。
- 仮想マシン、VPS、またはホスト型システムを使用していますか?
- これは、プログラムがほとんどまたはまったくインストールされていないクリーン インストールですか? その場合、システムは静かで、ノイズもほとんどなく、検出するものもほとんどありません。
- 他の OS 検出 Nmap オプションを試しましたか? --osscan-limit --osscan-guess --max-os-triesリンク
検出されたTCPポートが不足するとOS検出が困難になります。TCPリクエストへの応答がOS検出の仕組みです。こちらで詳しく説明されています。https://nmap.org/book/osdetect-methods.html