Ho un programma che ha due sezioni separate: una deve essere eseguita quando l'interfaccia di rete è LAN wireless e l'altra quando è una connessione LAN cablata . Come posso sapere che all'interno del mio programma? Quale funzione dovrei usare per ottenere queste informazioni?(C, Linux) Sapere se un'interfaccia di rete è wireless o cablata
risposta
È possibile utilizzare il comando iwconfig dalla riga di comando:
$ iwconfig
lo no wireless extensions.
eth0 no wireless extensions.
Se è necessario utilizzare da C, come @ collegamento del opaca sopra spiega, ottenere i sorgenti o utilizzare strace per vedere quali ioctl() è necessario utilizzare:
ioctl(3, SIOCGIWNAME, 0x7fff82c0d040) = -1 EOPNOTSUPP (Operation not supported)
ioctl(3, SIOCGIFFLAGS, {ifr_name="lo", ifr_flags=IFF_UP|IFF_LOOPBACK|IFF_RUNNING}) = 0
write(2, "lo no wireless extensions"..., 35lo no wireless extensions.
) = 35
ioctl(3, SIOCGIWNAME, 0x7fff82c0d040) = -1 EOPNOTSUPP (Operation not supported)
ioctl(3, SIOCGIFFLAGS, {ifr_name="eth0", ifr_flags=IFF_UP|IFF_BROADCAST|IFF_RUNNING|IFF_MULTICAST}) = 0
write(2, "eth0 no wireless extensions"..., 35eth0 no wireless extensions.
) = 35
Vedi SIOCGIWNAME usage:
#define SIOCGIWNAME 0x8B01 /* get name == wireless protocol */
/* SIOCGIWNAME is used to verify the presence of Wireless Extensions.
* Common values : "IEEE 802.11-DS", "IEEE 802.11-FH", "IEEE 802.11b"...
uhmm ... mi dispiace, sono abbastanza nuovo qui. Posso scegliere sia la risposta che l'opaco come "la" risposta corretta? – deinocheirus
Sfortunatamente no;) Puoi invitarli entrambi, ma dovresti accettare quello che risponde meglio alla tua domanda. La tua decisione :) –
Ho implementato un codice di esempio qui: https://gist.github.com/edufelipe/6108057 –
E 'possibile ottenerlo da C, naturalmente.
Controllare questo link per informazioni su una domanda simile.
Se il nome del dispositivo è NETDEVICE
, un controllo dell'esistenza della directory /sys/class/net/NETDEVICE/wireless
è un predicato che è possibile utilizzare. Questo è un approccio solo per Linux, tuttavia, e presuppone che sia installato /sys
, che è quasi sempre il caso normale. È anche più facile impiegare questo metodo dagli script, piuttosto che trattare con ioctl() s.
Se si sceglie come destinazione NetworkManager, controllare le relative API, C examples e NMDeviceType.
È possibile chiamare ioctl(fd, SIOCGIWNAME)
che restituisce la versione del protocollo di estensione wireless, che è disponibile solo su interfacce wireless.
int check_wireless(const char* ifname, char* protocol) {
int sock = -1;
struct iwreq pwrq;
memset(&pwrq, 0, sizeof(pwrq));
strncpy(pwrq.ifr_name, ifname, IFNAMSIZ);
if ((sock = socket(AF_INET, SOCK_STREAM, 0)) == -1) {
perror("socket");
return 0;
}
if (ioctl(sock, SIOCGIWNAME, &pwrq) != -1) {
if (protocol) strncpy(protocol, pwrq.u.name, IFNAMSIZ);
close(sock);
return 1;
}
close(sock);
return 0;
}
Per un esempio completo vedere: https://gist.github.com/edufelipe/6108057
- 1. È possibile verificare chi è connesso alla rete wireless?
- 2. Determinare se Linux o Windows in C++
- 3. Come rilevare quando dispositivi wireless noti si aggiungono alla mia LAN wireless su Linux
- 4. Come posso connettere/disconnettere/configurare una rete wireless in python?
- 5. Come posso sapere se SQLite è installato correttamente su Linux?
- 6. Come identificare se un processo è java o c o C++ process in linux?
- 7. Collegamento Android a wireless e Impostazioni di rete
- 8. Accesso all'interfaccia wireless (802.11) al livello MAC (Linux)
- 9. Come posso sapere se un cavo di rete è stato scollegato?
- 10. Come sapere se un processo ".exe" è stato scritto con C++ o C#?
- 11. Come utilizzare C# per abilitare una scheda di rete wireless disabilitata
- 12. C++ - Sapere se un tipo/classe è annidato?
- 13. Rif. C# - Come posso sapere se l'oggetto o è di tipo KeyValuePair e quindi lanciato?
- 14. UIViewController per sapere se è stato premuto o fatto scoppiare?
- 15. Come sapere se node.js è installato o meno
- 16. Come faccio a sapere se MotionEvent è relativo o assoluto?
- 17. Come sapere se un'immagine è stata caricata o no? - Paperclip
- 18. Come sapere se un oggetto è autoreleased o no?
- 19. Come sapere se un MediaRecorder è in esecuzione o no?
- 20. Come sapere se la tastiera visualizzata è Split o normale?
- 21. Come sapere se un modello è nuovo o no?
- 22. Gestione interfaccia di rete Linux con codice C
- 23. linux: come ottenere ssid wireless senza permesso di root?
- 24. Crea un'interfaccia di rete virtuale in Linux?
- 25. Come sapere se l'oggetto raphael è nascosto?
- 26. Linux - Trova se il processo è pronto o in esecuzione
- 27. Implementazione rete mesh wireless Ad-Hoc per Windows 7
- 28. Come sapere se è in esecuzione in una console linux rispetto a una sessione ssh?
- 29. un modo per rilevare iPad o iPhone sulla rete wireless? Buongiorno?
- 30. Rileva Windows o Linux in C, C++
Che cosa succede se ci sono diverse interfacce di rete che sono tutti di essere utilizzati in parallelo? – unwind
La parte wireless del codice verrà eseguita per quelli wireless e la parte cablata per quelli cablati, in parallelo. – deinocheirus