
類似の質問がたくさんあるにもかかわらず、私の質問に対する回答がなかったにもかかわらず、この質問を投稿することにしました。
- サーバーがリッスンするポートを定期的にチェックします。
- 私のUbuntu OSの出力は次の通りです
lsb_relase -a
:
Distributor ID: Ubuntu
Description: Ubuntu 20.04.3 LTS
Release: 20.04
Codename: focal
- コマンドを実行する
netstat -tulpn4
と、出力に不明なポートが表示されます。
tcp 0 0 127.0.0.53:53 0.0.0.0:* LISTEN 580/systemd-resolve
tcp 0 0 0.0.0.0:62176 0.0.0.0:* LISTEN 900/sshd: /usr/sbin
tcp 0 0 0.0.0.0:1122 0.0.0.0:* LISTEN 1158/sshd: username
tcp 0 0 0.0.0.0:3333 0.0.0.0:* LISTEN 1158/sshd: username
udp 0 0 0.0.0.0:51820 0.0.0.0:* -
udp 0 0 127.0.0.53:53 0.0.0.0:* 580/systemd-resolve
udp 0 0 X.X.X.X:1194 0.0.0.0:* 870/openvpn
- サーバーがポートをリッスンしている理由を調べるために、多くのツールとガイドを使用しましたが、
51820
答えは見つかりませんでした。 - 私が試してみました:
sudo lsof -i :51820
- 空の出力が得られました。sudo netstat -ltnp | grep -w ':51820'
- 空の出力が得られました。sudo fuser 51820/udp
- 空の出力が得られました。sudo netstat -peanut | grep ":51820"
- 出力は次のようになります:
udp 0 0 0.0.0.0:51820 0.0.0.0:* 0 26262 -
udp6 0 0 :::51820 :::* 0 26263 -
sudo ss -nlp | grep 51820
出力は次のようになります。
udp UNCONN 0 0 0.0.0.0:51820 0.0.0.0:*
udp UNCONN 0 0 [::]:51820 [::]:*
- 以下の回答を確認しましたが、解決策は見つかりませんでした。
ポートについて Web で検索したところ、51820
そのポートをリッスンしているのはインストールした「wireguard」であることがわかりましたが、どのコマンドを試してもそれを見つけることができなかったため、疑問は変わりません。
答え1
Wireguard をカーネル モジュールとして実装するオペレーティング システムを実行しています。カーネルはこのポートをリッスンしていますが、そのソケットを所有するプロセスがないため、PID は報告されませんnetstat
。
答え2
ジャンル:
この問題について 2 日間検索した結果、Michael Hampton 氏や Peter Zhabin 氏と同様に、リスニング ポート経由でカーネル プロセス ID を表示する既存のソリューションは存在しないことがわかりました。
さらに、その 2 日間で、commands
必要な答えをもたらす組み合わせもいくつか探しましたが、これを行うための簡単で便利な方法は見つかりませんでした。
私が作成したソリューションは暫定的なものであり、コミュニティのメンバーによって改善できると確信しています。
プロセスを見つけるための割引
- プロセスはカーネル レベルまたはプロセスに ID (PID) を持たせないようにするその他のレベルで実行されています。
- 指定されたコマンドの出力でプロセス ID またはプロセス プログラムが見つかりません:
lsof
、、、。netstat
ss
fuser
- 上記のコマンドの出力からリスニング ポートが見つかりました。ただし、リスニングの原因となっているプログラムまたは pid を構成することはできません。
についてgrep
:
grep
開いているポートに関する詳細情報を検索するには、を使用します。
grep
- パターンに一致する行を出力します。
grep
コマンド経由でマニュアルページからman grep
。
DESCRIPTION
grep searches for PATTERNS in each FILE. PATTERNS is one or more
patterns separated by newline characters, and grep prints each line
that matches a pattern. Typically PATTERNS should be quoted when grep
is used in a shell command.
- ここコマンドを正しく効果的に使用する方法についての素晴らしいトピックです。
指定されたポートを使用している PID またはプログラムを見つける方法grep
:
私の場合、実行するとsudo grep --exclude-dir={sys,proc} -rnw / -e 51820 | grep -i port
問題は解決し、ポートを使用しているプログラムに関する多くの情報が表示されました。
与えられた出力:
iptables.service:6:ExecStart=/usr/sbin/iptables -I INPUT -p udp --dport 51820 -j ACCEPT
/home/username/wireguard-install.sh:238: read -p "Port [51820]: " port
/home/username/wireguard-install.sh:241: read -p "Port [51820]: " port
/home/username/wireguard-install.sh:243: [[ -z "$port" ]] && port="51820"
/usr/share/doc/netplan/examples/wireguard.yaml:9: port: 51820
/etc/wireguard/wg0.conf:8:ListenPort = 51820
/etc/systemd/system/wg-iptables.service:6:ExecStart=/usr/sbin/iptables -I INPUT -p udp --dport 51820 -j ACCEPT
/etc/systemd/system/wg-iptables.service:10:ExecStop=/usr/sbin/iptables -D INPUT -p udp --dport 51820 -j ACCEPT
フラグが多数ある理由は、私が試した他の組み合わせでは大量の不要な出力があったためです。
コマンドの引数grep
の意味:
--exclude-dir
- パターンに一致する名前サフィックスを持つコマンドライン ディレクトリをスキップします。
そして特定の無視sys
とproc
ディレクトリ私たちの場合 不要な出力を避けるためです。
例:grep --exclude-dir={dir1,dir2}
検索中に dir1 と dir2 を回避します。
-r
または-R
再帰的です。-n
行番号です。-w
単語全体に一致することを意味します。/
上から下への検索を開始するための「最上位」ディレクトリを表します。-e
- は検索中に使用されるパターンです。51820
私たちの特定のケースでは、上記のネットワーク監視コマンドの 1 つによって検出されたポート番号です。|
- は、最初のコマンド部分の出力を 2 番目の部分にリダイレクトするパイプです。
私たちの場合:sudo grep --exclude-dir={sys,proc} -rnw / -e 51820
出力を次のコマンドにリダイレクトするgrep -i port
-i
- パターンと入力データ内の大文字と小文字の区別を無視し、大文字と小文字のみが異なる文字が互いに一致するようにします。port
- 検索を実行した目的に合わせて結果を絞り込み、フラグの後に定義された特定のポートに関する詳細情報を検索するために見つかりました-e
。
チップ:
- 最初のステップでは、ディレクトリから開始してスキャンを可能な限り最大化し
/
、最小限のフラグを使用して出力をフィルタリングして、達成できる詳細を見逃さないようにします。 - 必要な出力が見つかった後、または不要な出力が多すぎて必要な出力が見つからない場合は、フラグを 1 つずつ追加し始めます。
- ポート番号をパターンとして指定します。結局のところ、これが出発点であり、最終目標です。
grep
最初のスキャンをパターン フィルターにリダイレクトする二重コマンドを使用するport
と、特定箇所を正確に特定して解決を高速化できます。結局のところ、パターンとして数字を探しているため、多くの望ましくない結果につながる可能性があります。- 与えられた出力で結論を導き出せない場合は、見つけたキーワードを選択して Web で検索してください。