
비슷한 질문이 많은데도 이 질문을 올리기로 결정했는데, 어느 누구도 내 답변에 답해 주지 않았습니다.
- 나는 주기적으로 내 서버가 수신하는 포트를 확인합니다.
- 내 우분투 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 [::]:*
- 다음 답변을 살펴봤지만 해결책을 찾지 못했습니다.
포트에 대해 웹을 검색한 후 51820
내가 설치한 것이 해당 포트에서 수신 대기하는 "wireguard"라는 것을 알았지만 질문은 내가 시도한 모든 명령에서와 동일하게 남아 있으며 이를 찾을 수 없습니다.
답변1
Wireguard를 커널 모듈로 구현하는 운영 체제를 실행 중입니다. 커널이 이 포트를 수신하고 있으며 해당 소켓을 소유한 프로세스가 없으므로 에서 PID를 보고하지 않습니다 netstat
.
답변2
일반:
이 문제를 이틀 동안 검색한 후 Michael Hampton 및 Peter Zhabin과 같이 수신 포트를 통해 커널 프로세스 ID를 표시하는 기존 솔루션이 없다는 사실을 발견했습니다.
게다가 그 이틀 동안 나는 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
특정한 경우에는 위의 네트워크 모니터링 명령 중 하나에서 찾은 포트 번호입니다.|
- 첫 번째 명령 부분의 출력을 두 번째 명령 부분으로 리디렉션하는 파이프입니다.
우리의 경우: sudo grep --exclude-dir={sys,proc} -rnw / -e 51820
출력을 다음 명령으로 리디렉션grep -i port
-i
- 패턴과 입력 데이터에서 대소문자 구분을 무시하여 대소문자만 다른 문자가 서로 일치하도록 합니다.port
- 검색을 수행한 목적으로 결과 범위를 좁히고 플래그 다음에 정의된 특정 포트에 대한 추가 정보를 찾기 위해 발견되었습니다-e
.
팁:
- 첫 번째 단계에서는 디렉터리에서 시작하여 최소 플래그를 사용하여 출력을 필터링함으로써 스캔을 최대한 크게 만들어
/
우리가 달성할 수 있는 세부 정보를 놓치지 않도록 합니다. - 원하는 출력을 찾거나 원하지 않는 출력이 할당되어 원하는 출력을 찾는 데 문제가 발생한 후 플래그를 하나씩 추가하기 시작합니다.
- 포트 번호를 패턴으로 지정하십시오. 결국 이것이 시작점이자 끝 목표입니다.
grep
첫 번째 스캔을 패턴 필터로 리디렉션하는 이중 명령을 사용하면port
우리를 정확히 찾아내고 솔루션 속도를 높일 수 있습니다. 결국 우리는 패턴으로 숫자를 찾고 있으며 이로 인해 원하지 않는 결과가 많이 발생할 수 있습니다.- 주어진 결과로 결론을 내릴 수 없다면 찾은 키워드를 선택하여 웹에서 검색해 보세요.