Które połączenie to Internet

0

Witam,
Potrzebuję określić który adres IP używa komputer do połączenia z internetem i ten adres wyświetlić, chciałem to zrobić tak:

string adres="";
var adapters = from adapter in NetworkInterface.GetAllNetworkInterfaces()
                           where adapter.OperationalStatus == OperationalStatus.Up &&
                            adapter.Supports(NetworkInterfaceComponent.IPv4) &&
                            ((adapter.NetworkInterfaceType == NetworkInterfaceType.Wireless80211) || (adapter.NetworkInterfaceType == NetworkInterfaceType.Ethernet))
                            && adapter.GetIPProperties().GatewayAddresses.Count > 0 &&
                            adapter.GetIPProperties().GatewayAddresses[0].Address.ToString() != "0.0.0.0"
                           select adapter;
adres= (adapters.First(x => x is NetworkInterface)).GetIPProperties().GatewayAddresses[0].Address.ToString();
 

ale to nie działa bo nie widzę tam adresu IP tylko Gateway poza tym nawet jak jest to połączenie lokalne to też pokazuje to połączenie, może być też taki przypadek że połączenie z urządzeniem jest ale nie ma w nim jednak internetu wtedy też pokazuje że jest connect, ma ktoś pomysł jak to rozwiązać, bez logowania się na jakieś strony które zwrócą adres.

0

nie da się określić czy połączenie ma dostęp do internetu bez próby pingnięcia/ściągnięcia/czegokolwiek co się połączyć ze światem

0

poza tym więcej niż jedno połączenie może mieć dostęp do Internetu - jeżeli metryka połączeń jest identyczna to system może korzystać z nich naprzemiennie

niektóre połączenia mogą mieć częściowe połączenie (dostęp do tylko niektórych stron, portów)

Nie wiem co to za aplikacja ale jeżeli tworzysz jakiś serwer to zazwyczaj użytkownik powinien świadomie, samodzielnie wybrać interfejs na którym chce nasłuchiwać

0

No dobrze a gdy chce sprawdzić czy dane połączenie jest używane do Internetu lub lokalnie, to jak to zrobić? Czy można wysłać Pinga przez określony adres IP (określoną kartę sieciową)?

0

Możesz powiedzieć po co Ci to?
Jeżeli potrzebujesz połączenia do Internetu to zazwyczaj chcesz go wykorzystać do czegoś - spróbuj więc od razu wykorzystać i zobacz czy się uda

Ping pójdzie przez wybrany przez system interfejs zgodnie z tablicą routingu; nie da się puścić pinga przez konkretny interfejs

Pingowanie też nic nie daje - kiedyś miałem zablokowany Internet kablowy (zawieszona usługa) i aktywny modem USB - oba połączenia przepuszczały pingi ale tylko jedno pozwalało na dostęp do stron. Twoje sprawdzenie nic by w takim przypadku nie dało

0

Prawdopodobnie chcesz po prostu pobrać tablicę routingu

U mnie wygląda ona tak:

Miejsce docelowe w sieci   Maska sieci      Brama          Interfejs Metryka
          0.0.0.0          0.0.0.0        10.0.1.1      10.0.1.101     20
          0.0.0.0          0.0.0.0       172.16.0.1     172.16.0.106     30

Co oznacza że mam dwa dostępne połączenia do dostępu do dowolnego miejsca w sieci (0.0.0.0), ale zostanie najprawdopodobniej użyte to z niższą metryką (20), więc połączenie przejdzie przez interfejs 10.0.1.1
Z tym że jeżeli to połączenie zawiedzie to zostanie wykorzystane to z wyższą metryką
Jeżeli są dwa połączenie z tą samą metryką to zostanie wybrane to które ma bardziej zawężony zakres (wyższa maska)
Jeżeli metryka i maska jest identyczna to połączenie będzie wybrane losowo

Tablicę routingu prawdopodobnie pobierzesz korzystając z klas z namespace'a System.Web.Routing

Nadal nie mam pojęcia po co Ci w aplikacji takie informacje - tym wszystkim się zajmuje system automatycznie
Zewnętrznego IP nigdzie tutaj nie ma - system nie jest w stanie się dowiedzieć "jak go w sieci widzą" dopóki nie "spyta" kogoś z zewnątrz tej sieci o tę informację

1 użytkowników online, w tym zalogowanych: 0, gości: 1