Passa al contenuto principale

Ogni tanto qualcuno pone la seguente domanda: "Abbiamo aggiunto la nostra porta di applicazione al file dei servizi e ora qualche altra applicazione la sta usando - perché". La risposta è che il file dei servizi non riserva i numeri di porta. Il file dei servizi esiste in modo che le applicazioni possano chiamare la funzione getervbyname per trovare il numero di porta associato a un servizio o chiamare la funzione getervbyport per trovare il nome di un servizio associato a un numero di porta. Non c'è nulla che impedisca a due servizi diversi di mappare lo stesso numero di porta, anche se la funzione getervbyport restituirà solo il primo. Non c'è nemmeno l'obbligo che un'applicazione chiami getervbyname per scoprire quale porta dovrebbe usare. Uno sviluppatore di applicazioni può semplicemente codificare un numero di porta o permettere che venga inserito come parametro.

Non c'è modo di riservare un numero di porta - se non quello di usarlo, e solo se non si imposta l'opzione REUSEADDR socket; quindi avviare l'applicazione il più presto possibile dopo l'avvio di STCP, prima che l'altra applicazione prenda la porta.

 

A volte il colpevole non è un'altra applicazione server, ma un'applicazione client. La maggior parte delle applicazioni client non si legano ad una specifica porta locale, ma poiché è necessaria una porta locale, STCP ne assegna una dalla gamma di porte dinamiche (49152 - 65535). Se la vostra applicazione utilizza una porta in questo intervallo, vi suggerisco di cambiarla per utilizzare una porta dall'intervallo registrato, 1024-49151. Queste porte verranno utilizzate solo se un'applicazione si lega esplicitamente ad esse.

 

OK, supponiamo che ci sia un'altra applicazione che utilizza la porta della vostra applicazione; come potete identificare quale applicazione è e, soprattutto, chi l'ha avviata? Si tratta di un processo in tre fasi:

 

  1. Eseguire il comando “netstat -numeric -all_sockets -PCB_addr” e identificare l'intruso, in questo caso il numero di porto che mi interessa è 13592.
netstat -numeric -all_sockets -PCB_addr
Active connections (including servers)
PCB       Proto Recv-Q Send-Q Local Address Foreign Address
(state)
. . .
8e3aa300 tcp        0      0 *:13592          *:*          LISTEN
. . .
ready 13:50:12
  1. Eseguire il comando

“analyze_system -request_line 'match dv; dump_onetcb 8e3aa300' -quit”

passando alla richiesta dump_onetcb il PCB dell'intruso, 8e3aa300. Questo identifica il dispositivo STCP associato alla presa.
OpenVOS Release 17.0.1aj, analyze_system Release 17.0.1aj
Current process is 664, ptep 8E0EE800, Noah_Davids.CAC
sth_dvtx                 = 121 (stcp.m16_202)
  1. Eseguire il comando “who_locked #stcp.m16_202” per determinare quale processo sta utilizzando il dispositivo.
stcp.m16_202:
Object is write locked by Barney_Rubble.Dev (login) on module
%vs#m1
executing stcp_calls.pm.

 

Ed ecco fatto, tutto quello che dovete fare ora è contattare questo Barney Rubble e suggerirgli gentilmente di usare un numero di porto diverso.

© 2024 Stratus Technologies.