Ip adresa   zodpovězená otázka

VB.NET

Dobrý den, mám dotaz. Pro zjištění vlastní IP adresy využívám následujícího kódu, který funguje bezvadně ovšem pouze na XP.

Dim f As System.Net.IPHostEntry = System.Net.Dns.GetHostEntry(System.Net.Dns.GetHostName)
Dim lokalniIP As String = CType(f.AddressList.GetValue(0), Net.IPAddress).ToString

U W7 to ovšem vrací jiný řetězec. Existuje nějaká jednoduchá náprava?

Děkuji.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

No snad nespoléháte na to, že na pozici 0 bude vždy adresa toho síťového rozhraní, které potřebujete...

nahlásit spamnahlásit spam 0 / 2 odpovědětodpovědět

Rozumím vám, ale to není můj problém.

Výše uvedený kód vrací v prostředí W7 zřejmě řetězec Místní IPv6 a ne Adresu IPv4 který očekávám tak jak dělá u XP.

nahlásit spamnahlásit spam -1 / 1 odpovědětodpovědět

Očividně to je váš problém, když píšete, že to nefunguje a potřebujete to. To není chyba W7 ale špatného přístupu, který náhodou na konfiguraci nějakých Windows XP fungoval.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Prejdite celý AddressList a hľadajte IPAddress, ktorá má všetky vlastnosti začínajúce na IsIPv6 nastavené na false.Ak nepomôže tak pri najhoršom získate adresu vo forme reťazca funkciou ToString() a podľa jej obsahu už zistíte, či je to IPv6 adresa alebo IPv4 adresa.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Děkuji, trochu jsem si s tím pohrál, kdyby měl někdo jiný podobný problém, následující kód vrací první IP kterou zjistí.

Dim stroj As String = System.Net.Dns.GetHostName


Private Function mojeIP(ByVal stroj As String) As String

        Dim f As System.Net.IPHostEntry = System.Net.Dns.GetHostEntry(stroj)
        Dim adresy() As System.Net.IPAddress = f.AddressList

        For Each ip As System.Net.IPAddress In adresy
            If ip.AddressFamily = Sockets.AddressFamily.InterNetwork Then
                Return ip.ToString
            End If
        Next ip
        Return "IPv4 adresa nenalezena "
    End Function

nahlásit spamnahlásit spam 0 / 2 odpovědětodpovědět

Proč zrovna první nalezená IP adresa? A pokud to má vracet IPv4 z místního počítače, není třeba předávat DNS název, protože to vždy bude Dns.GetHostName.

nahlásit spamnahlásit spam -1 / 1 odpovědětodpovědět

AddressFamily je z hľadiska rozlíšenia IPv4 a IPv6 adresy nepodstatná.Kontrolujte vlastnosti, ktoré som napísal.Teda tie začínajúce na IsIPv6.

Ak neviete prísť na to, aká kombinácia označuje IPv4 adresy, tak si vypíšte zoznam adries aj so všetkými ich vlastnosťami do konzoly(samozrejme programovo) a porovnávajte to.

nahlásit spamnahlásit spam -1 / 1 odpovědětodpovědět

Dnes jsem řešil související problém. Funkční kód pro zjištění všech IPv4 adres z místního počítače:

Imports System.Net
Imports System.Net.Sockets
Module Module1
  Sub Main()
    Dim hostAddressInfo = Dns.GetHostEntry(Dns.GetHostName())
    Dim addresses = hostAddressInfo.AddressList
    For Each address In addresses
      If address.AddressFamily = AddressFamily.InterNetwork Then
        Console.WriteLine(address.ToString())
      End If
    Next
    Console.ReadKey()
  End Sub
End Module

Jak ale zjistit, která z adres slouží pro připojení do sítě Internet?

Napadlo mě připojit se na nějaký webserver TcpClientem a z množiny addresses najít to co odpovídá adrese jeho lokálního EndPointu ale to by nefungovalo univerzálně a připadá mi to jako drbat se levou nohou za pravým uchem.

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Dobrý den,

napadlo mě, jestli by pro zjištění používané adresy pro připojení k internetu nešlo použít výstup z utility tracert.

nahlásit spamnahlásit spam -1 / 1 odpovědětodpovědět

Šlo, ale parsovat textový výstup z nějaké externí aplikace je mnohem horší přístup než to, co jsem navrhoval já. Myslím že asi jediné řešení bude skutečně to co jsem psal s TcpClientem.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Našel sem pak ještě tohle:

http://www.codeproject.com/KB/IP/tracert...

nahlásit spamnahlásit spam -1 / 1 odpovědětodpovědět

Proč pořád ten tracing?! Já nepotřebuju vědět přes co se někam dostanu, ale IP adresu, přes kterou se připojuji do Internetu.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Zjistil jsem, že Microsoft.WindowsAPICodePack.Net.Network.Connectivity může mít hodnotu IPv4Internet, nebo IPv6Internet, tím pádem problém vyřešen bez jakéhokoliv úsilí.

nahlásit spamnahlásit spam 0 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:
Heslo:

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback