Я попробовал приведенный ниже код, но он продолжает давать мне IP-адрес iPhone (т.е. устройства). Но я хочу получить IP-АДРЕС МАРШРУТИЗАТОРА
public string GetIPAddress()
{
String ipAddress = "";
foreach (var netInterface in NetworkInterface.GetAllNetworkInterfaces())
{
Console.WriteLine(netInterface);
if (netInterface.NetworkInterfaceType == NetworkInterfaceType.Wireless80211 ||
netInterface.NetworkInterfaceType == NetworkInterfaceType.Ethernet)
{
foreach (var addrInfo in netInterface.GetIPProperties().UnicastAddresses)
{
if (addrInfo.Address.AddressFamily == AddressFamily.InterNetwork)
{
ipAddress = addrInfo.Address.ToString();
}
}
}
}
IP-адрес iPhone: 192.168.0.19 Маршрутизатор: 192.168.0.1
Я могу сделать хакерский способ удаления «9» из последнего набора IP-адресов. Но я не хочу этого делать.
@ProgrammingLlama со стороны iOS работает хорошо. Спасибо за это. но со стороны андроида. выдает ошибку: type=1400 audit(0.0:400): avc: denied { getattr } for path = "/proc/8503/net/route" dev = "proc" ino=4026532048 scontext=u:r:untrusted_app:s0:c151,c256,c512,c768 tcontext=u:object_r:proc_net:s0 tclass=file permissive=0 app=com.drawrect.tryrebex
Вы можете использовать следующий код, чтобы получить IP-АДРЕС МАРШРУТИЗАТОРА (адрес шлюза) со стороны Android.
Создайте DependenceService в папке Forms.
public interface INetServices
{
string ConvertGateway();
}
Затем добейтесь этого интерфейса в папке android.
[assembly: Dependency(typeof(NetService))]
namespace Forms.Droid
{
class NetService: INetServices
{
[Obsolete]
public string ConvertGateway()
{
WifiManager wifiManager = (WifiManager)Android.App.Application.Context.GetSystemService(Service.WifiService);
int ip = wifiManager.ConnectionInfo.IpAddress;
int gateway = wifiManager.DhcpInfo.Gateway;
IPAddress ipAddr = new IPAddress(ip);
IPAddress gatewayAddr = new IPAddress(gateway);
return gatewayAddr.ToString();
}
}
}
И добавьте следующее разрешение в AndroidManifest.xml
<uses-permission android:name = "android.permission.ACCESS_WIFI_STATE" />
В формах Xamarin вы можете получить IP-АДРЕС МАРШРУТИЗАТОРА, как показано в следующем коде.
var gatewayAddress = DependencyService.Get<INetServices>().ConvertGateway();
Console.WriteLine(gatewayAddress);
Это дает 10.0.2.2
не настоящий, т.е. (192.168.0.1)
@iTag Когда он подключен к WiFi, я проверил код на своем телефоне Android, и он возвращает настоящий код (шлюз: 172.20.10.1), IP-адрес: 172.20.10.1 Что означает 10.0.2.2
в вашем мобильном телефоне? Или бессмысленно?
Я протестировал Android-эмулятор, и он подключился к Wi-Fi-маршрутизатору. не на реальном устройстве.
я получаю тот же 10.0.2.2, и он также выдает и некоторые предупреждения. Я также проверю реальное устройство. type=1400 audit(0.0:18): avc: denied { getattr } for path = "/proc/3832/net/route" dev = "proc" ino=4026532048 scontext=u:r:untrusted_app:s0:c151,c256,c512,c768 tcontext=u:object_r:proc_net:s0 tclass=file permissive=0 app=com.drawrect.tryrebex
@iTag Я также думаю, что вам следует протестировать его на реальной машине. Одна и та же ошибка, о которой сообщалось дважды, вероятно, является причиной эмулятора Android.
Ваш код работает хорошо. я тестировал с реальным устройством. я получил IP-адрес шлюза маршрутизатора.
Я предполагаю, что это просто терминология Apple для «Шлюза»?