Me gustaría obtener la dirección IP de mi iPad mediante programación. ¿Cómo puedo consultar el subsistema de red para averiguar cuáles son mis direcciones IPv4 (e IPv6)?
PD: ¿Puedo desactivar IPv6 de alguna manera?
ios
macos
ip-address
ipv6
Wilbur
fuente
fuente
Respuestas:
El siguiente código encuentra todas las direcciones IPv4 e IPv6 en un dispositivo iOS u OSX. El primer
getIPAddress
método actúa más o menos como el código anterior en esta respuesta: puede preferir una u otra dirección de tipo, y siempre prefiere WIFI en lugar de celular (obviamente, podría cambiar esto).Lo más interesante es que puede devolver un diccionario de todas las direcciones encontradas, omitiendo direcciones para
not up
interfaces o direcciones asociadasloopback
. El código anterior, así como otras soluciones sobre este tema, no decodificarán correctamente IPv6 (inet_ntoa no puede manejarlos). Jens Alfke me lo señaló en un foro de Apple: la función adecuada para usar es inet_ntop (mire la página del manual y consulte este artículo inet_ntop también proporcionado por Jens.Las teclas del diccionario tienen la forma "interfaz" "/" "ipv4 o ipv6".
EDIT1: Código actualizado el 16 de mayo de 2014 (error señalado por lhunath, ver comentarios). Ahora se devuelven las direcciones de bucle invertido, pero es fácil para usted descomentar la prueba para excluirlas usted mismo.
EDIT2: (por alguna persona desconocida): Mejorado aún más el 13 de marzo de 2015: en caso de que el usuario use una VPN (independientemente de WiFi o celular), el código anterior habría fallado. Ahora funciona incluso con conexiones VPN. Las conexiones VPN tienen prioridad sobre WiFi y Cell porque así es como lo maneja el dispositivo. Esto incluso debería funcionar para Mac ya que la conexión VPN en una Mac también está usando IF utun0 pero no se ha probado.
EDITAR3: (8/9/2016) Dados los problemas experimentados por @Qiulang (ver comentarios) con el código VPN (que alguien más agregó), lo he comentado. Si alguien sabe definitivamente cómo especificar una VPN de usuario, intervenga con un comentario.
fuente
addr
obtiene NULL? mis usuarios ocasionalmente obtienen NULL. ¿Sabes cuáles son las posibles razones?AF_INET
para verificar. podría ser esto?En su archivo de implementación .m,
fuente
Muchas soluciones existentes solo consideran interfaces inalámbricas, que no funcionarán para conexiones cableadas a través de un adaptador Ethernet (es decir, sin Wifi o 3G); vea esta solución más reciente que también considera las direcciones IP obtenidas a través de interfaces cableadas.
iPad: cómo obtener la dirección IP cableada mediante programación (no a través de la red inalámbrica)
fuente
Obtenga la dirección IP usando Swift 3:
fuente
La solución actual no devuelve el dispositivo en0 en OS X, el siguiente código usa el Marco de configuración del sistema para obtener las interfaces y luego usa las funciones estándar de C para obtener la dirección IP.
fuente
Esta respuesta fue inspirada por la respuesta de @ DavidH. Solucioné algunos problemas, reemplazados
inet_ntop
por logetnameinfo
que permite un enfoque más limpio. Tenga en cuenta que esto genera un diccionario que asigna un nombre de interfaz a una matriz de direcciones IP (una interfaz puede tener múltiples IPv4 e IPv6 asociadas técnicamente). No distingue entre IPv4 e IPv6:fuente
strf
, ¿es esa una función auxiliar que tienes en tu código?err
ystrf
. Simplemente puede reemplazarstrf
con-stringWithCString:encoding:
.err
es unNSLog
contenedor que genera el archivo y la línea también. github.com/Lyndir/Pearl/blob/master/Pearl/…La respuesta de @ DavidH funciona bien hasta que obtuve este resultado de alguna red celular 4G:
No estoy usando vpn, así que no tengo idea de por qué tuve un utun0 / ipv6.
--- Actualizado ---
Además, depuro este problema y descubrí que puedo obtener una dirección VPN falsa incluso en otras redes 4G (¿es este error de iOS?),
Si usé vpn, obtendré esto:
Entonces es utun1 NO utun0
Sin saber por qué tendré que soltar vpn check :(
---- actualización ----
Le comenté un error (28131847) a Apple y respondí: "No todas las interfaces utun son para VPN. Hay otras características del sistema operativo que usan interfaces utun".
Pero cuando pregunté cómo obtener una dirección IP vpn válida, su respuesta fue bastante decepcionada: "Puede ir a Configuración -> VPN y ver su configuración de VPN para ver si la VPN está activa. En algunos casos puede ver el asignada la dirección IP allí también. Ahora estamos cerrando este informe de error ". :(
---- actualización 04/11/2016 ----
Llegué al problema nuevamente y necesito modificar aún más la respuesta de @ DavidH para solucionarlo:
Estaba en la red 4G y obtuve esta dirección:
Con su respuesta original, obtendré el wifi IP fe80 :: 8dd: 7d92: 4159: 170e, que era falso y la conexión falló.
Así que modifiqué el código para dar me gusta,
fuente
Gran solución para Swift en este archivo que sirve todos los detalles.
En una de mis aplicaciones, debo buscar la dirección IP de wifi. He usado las respuestas anteriores, en Swift 3 así:
En este código, se bloquea porque tengo que verificar
nil
en cada declaración que he usado como opcional?
. Por lo tanto, es mejor para mí usar un archivo vinculado dado en mi clase. Me resulta fácil verificar ahora como:He analizado la cadena
"."
porque la clase de interfaz devuelve dos interfaces en mi iPhone paraen0
direcciones como "fb00 ::" y direcciones como "101.10.1.1"fuente
Creé un archivo simple para obtener la dirección IP. Basé esta solución en las respuestas de @ lundhjem, @ DavidH y @ Ihunath. Considera conexiones cableadas. Sin embargo, no he incluido VPN en esta solución.
PCNetwork.h
PCNetwork.m
fuente
en iOS 13.4.1 no me funciona. Yo uso este arreglarlo.
fuente