Cześć,
czy da się w C# uzyskać publiczny adres IP bez żadnych zewnętrznych serwisów?
Co to znaczy? Chyba nie rozumiesz co to jest publiczny adres IP
Mam aplikację, która uruchomiona jest na jakimś urządzeniu np. na moim komputerze. I teraz chcę się dowiedzieć czy ten komputer na którym jest uruchomiona aplikacja jest podłączony do internetu a jeśli tak to jaki jest adres publiczny.
wejdz z niego na https://whatismyip.com a pozniej spróbuj się połączyć na tego ipka
Nie, nie da się tego zrobić "bezpośrednio". Musisz odpytać router, api lub stronę o publiczny adres.
AdamWox napisał(a):
Nie, nie da się tego zrobić "bezpośrednio". Musisz odpytać router, api lub stronę o publiczny adres.
Ok, dzięki za informację.
Bezpośrednio z aplikacji się nie da, to co możesz zrobić jeżeli nie chcesz korzystać z zewnętrznych/obcych API do pobierania adresu to utworzyć sobie swój własny serwis z jednym endpointem, który będzie zwracał adres IP z przychodzących requestów i opublikować go gdzieś na serwerze. Wtedy w swojej aplikacji robisz request do tej usługi i dostajesz jej adres IP.
[Route("myip")]
public class MyIPController : ControllerBase
{
public ActionResult<string?> GetMyIp()
{
return HttpContext.Connection.RemoteIpAddress?.MapToIPv4().ToString();
}
}
Bez łączenia z zewnętrznymi serwisami jeśli na komputerze jest publiczny IP to możesz sprawdzić to w ten sposób:
byte[][] LocalNetworks = {
new byte[]{192,168,168},
new byte[]{172,16,31},
new byte[]{10,0,255}
};
var ipAddr = Dns.GetHostAddresses(Dns.GetHostName())
.ToList()
.FirstOrDefault(ip =>
!LocalNetworks.Any(network =>
ip.GetAddressBytes()[0] == network[0] &&
(ip.GetAddressBytes()[1] >= network[1] && ip.GetAddressBytes()[1] <= network[2])
));
(Przy założeniu, że nikt nie zmodyfikował adresu IP).
Jeśli jest lokalny to pozostaje odpytanie DNS lub zewnętrznych serwisów (jak wspominali pozostali użytkownicy).
//Edit
Głupia pomyłka :)