Puncte:6

Cum să aflați ce serviciu ascultă pe un anumit port al unui server Ubuntu fără ID de proces?

drapel in

Am decis să postez această întrebare, deși există o mulțime de întrebări similare, dar niciuna nu mi-a răspuns.

  1. Verific periodic porturile pe care le ascultă serverul meu.
  2. Sistemul meu de operare Ubuntu prin rezultatul lsb_relase -a:
ID distribuitor: Ubuntu
Descriere: Ubuntu 20.04.3 LTS
Lansare: 20.04
Nume de cod: focal
  1. Rulez comanda netstat -tulpn4 iar rezultatul arată un port necunoscut:
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:* ASCULTĂ 900/sshd: /usr/sbin 
tcp 0 0 0.0.0.0:1122 0.0.0.0:* LISTEN 1158/sshd: nume de utilizator    
tcp 0 0 0.0.0.0:3333 0.0.0.0:* LISTEN 1158/sshd: nume de utilizator    
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         
  1. Am folosit multe instrumente și ghiduri pentru a afla de ce serverul meu ascultă pe port 51820 fără să găsească un răspuns.
  2. Am încercat:
    • sudo lsof -i :51820 - și a primit o ieșire goală.
    • sudo netstat -ltnp | grep -w ':51820' - și a primit o ieșire goală.
    • sudo fuser 51820/udp - și a primit o ieșire goală.
    • sudo netstat -arahide | grep ":51820" - iesirea este:
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 ieșirea este:
udp UNCONN 0 0 0.0.0.0:51820 0.0.0.0:*                                                                                                     
udp UNCONN 0 0 [::]:51820 [::]:*  
  1. M-am uitat la următoarele răspunsuri și nu am găsit o soluție:

După ce ai căutat pe web despre port 51820 Am aflat că este „wireguard”-ul pe care l-am instalat care ascultă pe acel port, dar întrebarea rămâne aceeași ca în orice comandă pe care am încercat-o, nu am putut afla asta.

anx avatar
drapel fr
anx
legate de: [wireguard nu ascultă pe port](https://serverfault.com/questions/1015322/the-wireguard-not-listening-on-port-after-started)
CrazyTux avatar
drapel in
@anx tnx pentru comentariul tău, serviciul meu „wireguard” funcționează bine și totuși răspunsurile din postarea aferentă nu îmi rezolvă problema de a detecta procesul care provoacă ascultarea portului specific printr-o comandă de terminal.
djdomi avatar
drapel za
apoi actualizați întrebarea pentru a fi mai specific. Ocoliți problema pe care doriți să o rezolvați.
CrazyTux avatar
drapel in
Cum pot fi mai specific? Chiar încerc să obțin un răspuns la titlul întrebării și am enumerat toate soluțiile pe care le-am încercat deja.
Puncte:5
drapel cn

Executați un sistem de operare care implementează Wireguard ca modul de nucleu. Nucleul dvs. ascultă pe acest port și, din moment ce nu există niciun proces care să dețină acel socket, niciun PID nu este raportat de către netstat.

Michael Hampton avatar
drapel cz
Cum afli ce serviciu kernel ascultă acel port?
Peter Zhabin avatar
drapel cn
Odată am petrecut destul de mult timp săpând codul kernel-ului pentru a afla dacă există o modalitate de a face acest lucru și am aflat că nucleul înregistrează o referință la modulul care deține un socket în câmpul `proto_ops` al socket-ului kernel-ului, dar nu știu a instrumentelor userland care l-ar putea arunca.
CrazyTux avatar
drapel in
Răspunsul dvs. este grozav și a ajutat foarte mult, dacă veți afla cum să aruncați acele prize de kernel și să le editați în răspunsul dvs., îl voi aproba, am votat pentru răspunsul informativ.
Michael Hampton avatar
drapel cz
@CrazyTux M-am uitat și la asta și am aflat că nucleul nu exportă aceste informații în userland. Nu cred că este posibil decât dacă o actualizare a nucleului oferă funcționalitatea cumva.
Puncte:2
drapel in

Genral:

După o căutare de două zile pe care am făcut-o în jurul problemei, am descoperit ca Michael Hampton și Peter Zhabin că nu există o soluție existentă care să arate un ID de proces al nucleului printr-un port de ascultare.

În plus, în acele două zile am căutat și câteva comenzi combinații care pot aduce răspunsul dorit și nu au găsit nicio modalitate simplă sau convenabilă de a face acest lucru.

Soluția pe care am creat-o este preliminară și sunt sigur că poate fi îmbunătățită de membrii comunității.

Reduceri pentru localizarea procesului

  • Procesul rulează la nivel de kernel sau la orice alt nivel care evitând ca procesul să aibă un id (PID).
  • Id-ul procesului sau programul procesului nu a fost găsit de ieșirea comenzilor date: lsof, netstat, ss, cuptor.
  • Am găsit un port de ascultare din ieșirea comenzilor de mai sus - Dar nu putem configura programul sau codul pid care a cauzat ascultarea.

Despre grep:

Noi vom folosi grep pentru a găsi mai multe informații despre portul deschis.

grep - linii de imprimare care se potrivesc cu modele.

Din grep pagina de manual prin om grep comanda.

DESCRIERE
grep caută PATTERNE în fiecare FIȘIER. PATTERNS este unul sau mai multe
       modele separate prin caractere newline, iar grep imprimă fiecare linie
       care se potrivește cu un model. În mod obișnuit, MODELE ar trebui să fie citate atunci când grep
       este folosit într-o comandă shell.
  • Aici este un subiect grozav despre cum se utilizează comanda corect și eficient.

Cum să localizați PID-ul sau programul care folosește portul dat prin grep:

În cazul meu execut sudo grep --exclude-dir={sys,proc} -rnw / -e 51820 | grep -i port a rezolvat problema și a arătat multe informații despre programul care folosește portul.

Ieșirea dată:

iptables.service:6:ExecStart=/usr/sbin/iptables -I INPUT -p udp --dport 51820 -j ACCEPT
/home/username/wireguard-install.sh:238: citiți -p „Port [51820]:” port
/home/username/wireguard-install.sh:241: citiți -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

Motivul pentru numeroasele steaguri este că alte combinații pe care le-am încercat au avut o cantitate mare de ieșiri nedorite.

Care sunt argumentele grep Comanda înseamnă:

  • --exclude-dir - Omite orice director de linie de comandă cu un sufix de nume care se potrivește modelul.

Și ignorarea specifică sys și proc directoare în cazul nostru specific este de a evita ieșirile nedorite.

Exemplu: grep --exclude-dir={dir1,dir2} va evita dir1 și dir2 în timpul căutării.

  • -r sau -R este recursiv.
  • -n este numărul liniei.
  • -w reprezintă potrivirea întregului cuvânt.
  • / reprezintă directorul „cel mai înalt” pentru a începe căutarea de sus în jos.
  • -e - este modelul folosit în timpul căutării.
  • 51820 în cazul nostru specific este numărul portului care a fost găsit de una dintre comenzile de monitorizare a rețelei de mai sus.
  • | - este conducta de redirecționare a ieșirii primei părți de comandă către a doua.

În cazul nostru: redirecționare sudo grep --exclude-dir={sys,proc} -rnw / -e 51820 ieșire la următoarea comandă grep -i port

  • -i - Ignorați diferențele dintre majuscule și minuscule în modele și datele de intrare, astfel încât caractere care diferă doar în cazul în care se potrivesc între ele.
  • port - Găsit pentru a restrânge rezultatele la scopul pentru care am efectuat căutarea, găsind mai multe informații despre portul specific care a fost definit după -e steag.

Sfaturi:

  • Faceți scanarea cât mai mare posibil în primii pași, pornind de la / director, și folosind steaguri minime pentru a filtra rezultatul, pentru a vă asigura că nu veți rata niciun detaliu pe care l-am putea obține.
  • După ce ați găsit ieșirea dorită sau întâmpinați probleme cu găsirea ieșirii dorite cauzate de alocarea de ieșiri nedorite, începeți să adăugați steaguri unul câte unul.
  • Specificați numărul portului ca model, la urma urmei, acesta este punctul nostru de plecare și scopul nostru final.
  • Folosiți dublu grep comenzi care redirecționează prima scanare în port filtru de model, ne poate identifica și accelera soluția, până la urmă căutăm un număr ca model și acest lucru poate duce la multe rezultate nedorite.
  • Dacă nu puteți intra în concluzii cu rezultatul dat, faceți o căutare pe web cu cuvintele cheie alese pe care le-ați găsit.

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.