Passa al contenuto principale

Di tanto in tanto qualcuno pone la seguente domanda: "Abbiamo aggiunto la porta della nostra applicazione al file dei servizi e ora un'altra applicazione la sta utilizzando: perché?". La risposta è che il file dei servizi non riserva i numeri di porta. Il file dei servizi esiste affinché le applicazioni possano chiamare la funzione getservbyname per trovare il numero di porta associato a un servizio o chiamare la funzione getservbyport per trovare il nome di un servizio associato a un numero di porta. Nulla impedisce a due servizi diversi di mapparsi sullo stesso numero di porta, anche se la funzione getservbyport restituirà solo il primo. Non è inoltre necessario che un'applicazione chiami getservbyname per scoprire quale porta deve utilizzare. Uno sviluppatore di applicazioni può semplicemente codificare in modo rigido un numero di porta o consentirne l'inserimento come parametro.

Non c'è modo di prenotare un numero di porta, se non quello di usarlo, e solo se non imposti l'opzione socket REUSEADDR; quindi avvia la tua app il prima possibile dopo aver avviato STCP, prima che un'altra app si prenda la tua porta.

 

A volte il colpevole non è un'altra applicazione server, ma un'applicazione client. La maggior parte delle applicazioni client non si collega a una porta locale specifica, ma poiché è necessaria una porta locale, STCP ne assegna una dall'intervallo di porte dinamiche (49152 - 65535). Se la tua applicazione utilizza una porta in questo intervallo, ti consiglio di cambiarla in modo che utilizzi una porta dell'intervallo registrato, 1024-49151. Queste porte saranno utilizzate solo se un'applicazione si collega esplicitamente ad esse.

 

OK, supponiamo che ci sia un'altra applicazione che utilizza la porta della tua applicazione; come puoi identificare di quale applicazione si tratta e, cosa ancora più importante, chi l'ha avviata? Si tratta di un processo in tre fasi:

 

  1. Esegui il comando “netstat -numeric -all_sockets -PCB_addr” e identificare l'intruso, in questo caso il numero di porta 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. Esegui 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 al socket.
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. Esegui 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.

 

Ecco fatto, ora non ti resta che contattare questo Barney Rubble e suggerirgli gentilmente di utilizzare un numero di porta diverso.