2011-08-27 38 views
5

Cách lấy địa chỉ ip trong vb.net. tôi sử dụng dưới đây mã để có được địa chỉ IP địa phương nhưng nó cho thấy dns không được khai báo. bất cứ ai có thể cho tôi biết là những gì mà Dns trong Bộ luậtLàm cách nào để nhận địa chỉ ip cục bộ bằng vb?

VB Mã

Imports System.Environment 
Imports System.Net 

Public Class Tester 
Public Shared Sub Main 
Dim hostname As String = Dns.GetHostName() 
Dim ipaddress As String = CType(Dns.GetHostByName(hostname).AddressList.GetValue(0), IPAddr 
ess).ToString 
Console.WriteLine("Computer Name: " & hostname & " IP Address: " & ipaddress) 
End Sub 

End Class 
+0

Bạn biết rằng máy có thể không có hoặc một số địa chỉ IP? –

+2

bây giờ bạn đã thay đổi câu hỏi hoàn toàn - trước tiên bạn hỏi về 'Dns', bây giờ bạn đang hỏi về iüp của khách hàng được kết nối ... NẾU bạn có câu hỏi thứ hai, bạn phải mở câu hỏi thứ hai và KHÔNG thay đổi câu hỏi đầu tiên !!! Tôi đã trả lời câu hỏi của bạn về câu hỏi gốc ... vui lòng đánh dấu/đánh dấu là được chấp nhận nếu có câu trả lời nào được trợ giúp VÀ mở câu hỏi thứ hai về "client ip"! – Yahia

+2

rõ ràng là một người không biết đặt câu hỏi một cách lịch sự, chấp nhận được, dân sự, con người, bình thường, phong nha – Martin

Trả lời

1

Sử dụng này:

HttpContext.Current.Request.UserHostAddres 

Hy vọng điều này sẽ giúp.

0

ip = Dns.GetHostAddresses (hostname)

đây là một mẫu mã MSDN

0

Bạn có thể lấy địa chỉ IP cục bộ của hệ thống sử dụng mã dưới đây:

Dim host As String = System.Net.Dns.GetHostName() 
Dim LocalHostaddress As String = System.Net.Dns.GetHostByName(host).AddressList(1).ToString() 
+0

Thực sự đây là một câu trả lời tồi và khó hiểu. Điều gì sẽ xảy ra khi IP mà chúng tôi mong muốn ở chỉ mục 0 hoặc 2 của 'AddressList()'? – ElektroStudios

+0

Điều này sẽ là một giải pháp tốt hơn, nhưng vẫn không hiệu quả 100%: Trả về (Từ IP Như Net.IPAddress Trong System.Net.Dns.GetHostEntry (System.Net.Dns.GetHostName()) AddressList() Nơi không IP.ToString.Contains (":")). FirstOrDefault.ToString – ElektroStudios

+0

Điều gì sẽ xảy ra nếu bộ điều hợp loopback hoặc bộ điều hợp LAN Bluetooth được cài đặt? Bạn đang giả định bộ điều hợp mạng 1 là bộ điều hợp chính xác mà không kiểm tra. Vấn đề là - mảng chỉ số bắt đầu từ 0, không phải là một. Có thể thậm chí không có bộ điều hợp 1 trong mảng. Cách tốt nhất là foreach iterate thông qua các adapter và [quyết định] cái nào là đúng bằng các phương thức xác thực đơn giản để kiểm tra địa chỉ ipv4, ipv6 hoặc bt. – Matth3w

3

Kể từ khi tôi có được cảm giác rằng, câu hỏi (trong tiêu đề) chưa được trả lời đầy đủ ...

Dim hostName = System.Net.Dns.GetHostName() 
For Each hostAdr In System.Net.Dns.GetHostEntry(hostName).AddressList() 

    ' If you just want to write every IP 
    Console.WriteLine("Name: " & hostName & " IP Address: " & hostAdr.ToString() 

    ' If you want to look if the device is member of a specific network 
    If hostAdr.ToString().StartsWith("192.168.1.") Then DoSomething() : Exit For 

    ' I think you get the idea ^^ 
    ' ... 
Next 

... rõ ràng đây không phải là chính xác những gì OP yêu cầu, nhưng chỉ từ tiêu đề và liên kết google, điều này sẽ trả lời những gì mọi người đến đây đang tìm kiếm.

Btw GetHostByName() dường như không được dùng nữa, GetHostEntry() giống như cách này hoạt động theo cùng một cách mà không cần cảnh báo.

0
Dim ipaddress As String = 
    Dns.GetHostEntry(Dns.GetHostName).AddressList(0).ToString 

này rất có thể sẽ cung cấp cho địa chỉ IPv6

Dim ipaddress As String = 
    Dns.GetHostEntry(Dns.GetHostName).AddressList.FirstOrDefault(() => { }, 
    (ip.AddressFamily = AddressFamily.InterNetwork)).ToString 

này sẽ cung cấp địa chỉ IPv4

VB của tôi là gỉ vì vậy đây là một mã C# mà làm việc cho tôi.

using System.Linq; 

using System.Net.Sockets; 

string IPaddress = 
    Dns.GetHostEntry(Dns.GetHostName()).AddressList[0].ToString(); //For Ipv6 

string IPaddress = 
    Dns.GetHostEntry(Dns.GetHostName()).AddressList.FirstOrDefault(ip => 
    ip.AddressFamily == AddressFamily.InterNetwork).ToString(); //For Ipv4 

Tôi hy vọng điều này sẽ hữu ích.

1
Dim hostName = System.Net.Dns.GetHostName() 
    For Each hostAdr In System.Net.Dns.GetHostEntry(hostName).AddressList() 

     ' If you just want to write every IP 
     'Console.WriteLine("Name: " & hostName & " IP Address: " & hostAdr.ToString()) 
     Me.RichTextBox1.Text = hostAdr.ToString 

     'If you want to look if the device is member of a specific network 

     ' ... 
    Next 
Các vấn đề liên quan