Non credo che ci sia una risposta definitiva e giusta alla tua domanda. Invece c'è un grande pacchetto di modi per avvicinarsi a ciò che desideri. Quindi fornirò alcuni suggerimenti su come farlo.
Se una macchina ha più di 2 interfacce ( lo
conta come una) avrai problemi a rilevare facilmente l'interfaccia giusta. Ecco alcune ricette su come farlo.
Il problema, ad esempio, è se gli host si trovano in una DMZ dietro un firewall NAT che cambia l'IP pubblico in un IP privato e inoltra le richieste. La tua macchina può avere 10 interfacce, ma solo una corrisponde a quella pubblica.
Anche il rilevamento automatico non funziona nel caso in cui tu sia su double-NAT, dove il tuo firewall traduce persino l'IP sorgente in qualcosa di completamente diverso. Quindi non puoi nemmeno essere sicuro che il percorso predefinito porti alla tua interfaccia con un'interfaccia pubblica.
Rilevalo tramite il percorso predefinito
Questo è il mio modo consigliato per rilevare automaticamente le cose
Qualcosa come di ip r get 1.1.1.1
solito ti dice l'interfaccia che ha il percorso predefinito.
Se vuoi ricrearlo nel tuo linguaggio di scripting / programmazione preferito, usa strace ip r get 1.1.1.1
e segui la strada di mattoni gialli.
Impostalo con /etc/hosts
Questa è la mia raccomandazione se vuoi mantenere il controllo
Puoi creare una voce in /etc/hosts
like
80.190.1.3 publicinterfaceip
Quindi puoi usare questo alias publicinterfaceip
per fare riferimento alla tua interfaccia pubblica.
Purtroppo haproxy
non risolve questo trucco con IPv6
Usa l'ambiente
Questa è una buona soluzione /etc/hosts
nel caso in cui non lo seiroot
Uguale a /etc/hosts
. ma usa l'ambiente per questo. Puoi provare /etc/profile
o ~/.profile
per questo.
Quindi, se il tuo programma ha bisogno di una variabile MYPUBLICIP
, puoi includere codice come (questo è C, sentiti libero di creare C ++ da esso):
#define MYPUBLICIPENVVAR "MYPUBLICIP"
const char *mypublicip = getenv(MYPUBLICIPENVVAR);
if (!mypublicip) { fprintf(stderr, "please set environment variable %s\n", MYPUBLICIPENVVAR); exit(3); }
Quindi puoi chiamare il tuo script / programma in /path/to/your/script
questo modo
MYPUBLICIP=80.190.1.3 /path/to/your/script
funziona anche in crontab
.
Enumera tutte le interfacce ed elimina quelle che non desideri
Il modo disperato se non puoi usare ip
Se sai cosa non vuoi, puoi enumerare tutte le interfacce e ignorare tutte quelle false.
Qui sembra già essere una risposta https://stackoverflow.com/a/265978/490291 per questo approccio.
Fallo come DLNA
La via dell'uomo ubriaco che cerca di affogarsi nell'alcol
Puoi provare a enumerare tutti i gateway UPnP sulla tua rete e in questo modo trovare un percorso appropriato per qualcosa di "esterno". Questo potrebbe anche essere su un percorso in cui il percorso predefinito non punta.
Per ulteriori informazioni su questo forse vedere https://en.wikipedia.org/wiki/Internet_Gateway_Device_Protocol
Questo ti dà una buona impressione su quale sia la tua vera interfaccia pubblica, anche se il tuo percorso predefinito punta altrove.
Ce ne sono anche di più
Dove la montagna incontra il profeta
I router IPv6 si pubblicizzano per darti il giusto prefisso IPv6. Guardare il prefisso ti dà un suggerimento se ha un IP interno o uno globale.
Puoi ascoltare i frame IGMP o IBGP per trovare un gateway adatto.
Ci sono meno di 2 ^ 32 indirizzi IP. Quindi non ci vuole molto su una LAN per eseguire il ping di tutti. Questo ti dà un suggerimento statistico su dove si trova la maggior parte di Internet dal tuo punto di vista. Tuttavia dovresti essere un po 'più ragionevole del famoso https://de.wikipedia.org/wiki/SQL_Slammer
ICMP e persino ARP sono buone fonti per le informazioni sulla banda laterale della rete. Potrebbe aiutarti anche tu.
Puoi utilizzare l'indirizzo di trasmissione Ethernet per contattare tutti i dispositivi dell'infrastruttura di rete che spesso ti aiuteranno, come DHCP (anche DHCPv6) e così via.
Questo elenco aggiuntivo è probabilmente infinito e sempre incompleto, perché ogni produttore di dispositivi di rete è impegnato a inventare nuove falle di sicurezza su come rilevare automaticamente i propri dispositivi. Il che spesso aiuta molto su come rilevare alcune interfacce pubbliche dove non ce ne dovrebbe essere una.
'Nuff ha detto. Su.