我正在嘗試這樣做C#。我需要找到在我的網絡中處於活動狀態的所有IP地址,並將它們顯示在列表中。我可以在網絡中ping所有可用的(1 ... 255)IP地址。但我想讓這個過程更快。查找網絡中的所有IP地址
回答
請參閱This link瞭解異步客戶端Socket以瞭解如何更快地ping通。
編輯:快速片段如何做到這一點:
private static void StartClient() {
// Connect to a remote device.
try {
// Establish the remote endpoint for the socket.
// The name of the
// remote device is "host.contoso.com".
IPHostEntry ipHostInfo = Dns.Resolve("host.contoso.com");
IPAddress ipAddress = ipHostInfo.AddressList[0];
IPEndPoint remoteEP = new IPEndPoint(ipAddress, port);
// Create a TCP/IP socket.
Socket client = new Socket(AddressFamily.InterNetwork,
SocketType.Stream, ProtocolType.Tcp);
// Connect to the remote endpoint.
client.BeginConnect(remoteEP,
new AsyncCallback(ConnectCallback), client);
connectDone.WaitOne();
// Send test data to the remote device.
Send(client,"This is a test<EOF>");
sendDone.WaitOne();
// Receive the response from the remote device.
Receive(client);
receiveDone.WaitOne();
// Write the response to the console.
Console.WriteLine("Response received : {0}", response);
// Release the socket.
client.Shutdown(SocketShutdown.Both);
client.Close();
} catch (Exception e) {
Console.WriteLine(e.ToString());
}
}
感謝NewAmbition。但我正在尋找一種替代方法來檢測所有 –
爲什麼你在尋找替代品? (即使那樣,你從來沒有在你的問題中說過) - Pinging可以讓你知道IP是否已經啓動。 – TheGeekZn
如果沒有像主域名註冊的域名服務器/域名服務器這樣的參考中心點,您將不得不聯繫所有候選地址並查看是否有任何域名,ping就是這樣做的方法。 –
http://www.advanced-ip-scanner.com/服用。這個工具可以用來查看你的網絡上有哪些ip活動。 PC使用什麼類型的網絡硬件。
其實我正在尋找一個解決方案,涉及編程 –
public static void NetPing()
{
Ping pingSender = new Ping();
foreach (string adr in stringAddressList)
{
IPAddress address = IPAddress.Parse(adr);
PingReply reply = pingSender.Send (address);
if (reply.Status == IPStatus.Success)
{
//Computer is active
}
else
{
//Computer is down
}
}
}
此代碼在大約1秒內掃描我的網絡255個D級分段。我在VB.net中編寫它,並將它轉換爲C#(如果有任何錯誤,請致歉)。將其粘貼到控制檯項目中並運行。根據需要修改。
注:該代碼是不生產做好準備,需要在特別的情況下計算的改進(試圖實現與BlockingCollection
代替TaskFactory
)。
如果結果不穩定,修改ttl(生存時間)和超時。
運行代碼會給這樣的結果:
Pinging 255 destinations of D-class in 192.168.1.*
Active IP: 192.168.1.100
Active IP: 192.168.1.1
Finished in 00:00:00.7226731. Found 2 active IP-addresses.
C#代碼:
using System.Net.NetworkInformation;
using System.Threading;
using System.Diagnostics;
using System.Collections.Generic;
using System;
static class Module1
{
private static List<Ping> pingers = new List<Ping>();
private static int instances = 0;
private static object @lock = new object();
private static int result = 0;
private static int timeOut = 250;
private static int ttl = 5;
public static void Main()
{
string baseIP = "192.168.1.";
Console.WriteLine("Pinging 255 destinations of D-class in {0}*", baseIP);
CreatePingers(255);
PingOptions po = new PingOptions(ttl, true);
System.Text.ASCIIEncoding enc = new System.Text.ASCIIEncoding();
byte[] data = enc.GetBytes("abababababababababababababababab");
SpinWait wait = new SpinWait();
int cnt = 1;
Stopwatch watch = Stopwatch.StartNew();
foreach (Ping p in pingers) {
lock (@lock) {
instances += 1;
}
p.SendAsync(string.Concat(baseIP, cnt.ToString()), timeOut, data, po);
cnt += 1;
}
while (instances > 0) {
wait.SpinOnce();
}
watch.Stop();
DestroyPingers();
Console.WriteLine("Finished in {0}. Found {1} active IP-addresses.", watch.Elapsed.ToString(), result);
Console.ReadKey();
}
public static void Ping_completed(object s, PingCompletedEventArgs e)
{
lock (@lock) {
instances -= 1;
}
if (e.Reply.Status == IPStatus.Success) {
Console.WriteLine(string.Concat("Active IP: ", e.Reply.Address.ToString()));
result += 1;
} else {
//Console.WriteLine(String.Concat("Non-active IP: ", e.Reply.Address.ToString()))
}
}
private static void CreatePingers(int cnt)
{
for (int i = 1; i <= cnt; i++) {
Ping p = new Ping();
p.PingCompleted += Ping_completed;
pingers.Add(p);
}
}
private static void DestroyPingers()
{
foreach (Ping p in pingers) {
p.PingCompleted -= Ping_completed;
p.Dispose();
}
pingers.Clear();
}
}
和VB.net代碼:
Imports System.Net.NetworkInformation
Imports System.Threading
Module Module1
Private pingers As New List(Of Ping)
Private instances As Integer = 0
Private lock As New Object
Private result As Integer = 0
Private timeOut As Integer = 250
Private ttl As Integer = 5
Sub Main()
Dim baseIP As String = "192.168.1."
Dim classD As Integer = 1
Console.WriteLine("Pinging 255 destinations of D-class in {0}*", baseIP)
CreatePingers(255)
Dim po As New PingOptions(ttl, True)
Dim enc As New System.Text.ASCIIEncoding
Dim data As Byte() = enc.GetBytes("abababababababababababababababab")
Dim wait As New SpinWait
Dim cnt As Integer = 1
Dim watch As Stopwatch = Stopwatch.StartNew
For Each p As Ping In pingers
SyncLock lock
instances += 1
End SyncLock
p.SendAsync(String.Concat(baseIP, cnt.ToString()), timeOut, data, po)
cnt += 1
Next
Do While instances > 0
wait.SpinOnce()
Loop
watch.Stop()
DestroyPingers()
Console.WriteLine("Finished in {0}. Found {1} active IP-addresses.", watch.Elapsed.ToString(), result)
Console.ReadKey()
End Sub
Sub Ping_completed(s As Object, e As PingCompletedEventArgs)
SyncLock lock
instances -= 1
End SyncLock
If e.Reply.Status = IPStatus.Success Then
Console.WriteLine(String.Concat("Active IP: ", e.Reply.Address.ToString()))
result += 1
Else
'Console.WriteLine(String.Concat("Non-active IP: ", e.Reply.Address.ToString()))
End If
End Sub
Private Sub CreatePingers(cnt As Integer)
For i As Integer = 1 To cnt
Dim p As New Ping
AddHandler p.PingCompleted, AddressOf Ping_completed
pingers.Add(p)
Next
End Sub
Private Sub DestroyPingers()
For Each p As Ping In pingers
RemoveHandler p.PingCompleted, AddressOf Ping_completed
p.Dispose()
Next
pingers.Clear()
End Sub
End Module
ARP路由,您可以簡單地發送所有地址的ARP請求,稍等一會,然後查看主機的ARP表格
這可能有助於
所以你只限於解決方案連接到他的子網的主機? –
這似乎是他想要做的事情,而且它也應該很快。 –
他的問題不清楚,這個解決方案提供的不止是ping –
- 1. 一個保留的IP地址:「所有0的網絡地址」?
- 2. 從網絡設備的IP地址列表中查找打印機IP地址
- 3. 尋找訪客網絡IP地址
- 4. 查找網絡地址
- 5. 在Linux中列出網絡中的所有活動IP地址
- 6. 在我的網絡中查找IP地址
- 7. 如何在網絡中查找未使用的IP地址?
- 8. 查找所有本地網絡廣播地址
- 9. 如何獲取Java中所有網絡設備的IP地址
- 10. 如何查找本地網絡IP地址
- 11. 跨IP網絡的IP地址
- 12. 如何在網絡上查找特定桌面的IP地址?
- 13. 從網絡上的IP地址查找特定計算機
- 14. 查找IP地址
- 15. 獲取IP地址的所有主機名的網絡
- 16. 在Python中的IP地址網絡3.3
- 17. 獲取網絡上的所有IP和MAC地址
- 18. 在FreeBSD上枚舉IP地址的所有網絡接口
- 19. 本地網絡HTTPS的IP地址
- 20. 如何在沒有IP地址的網絡上找到設備
- 21. 查找默認網絡打印機IP地址
- 22. 使用Python查找網絡(外部)IP地址
- 23. 通過ping網關IP地址查找
- 24. 按IP地址查找網卡
- 25. 在Centos中查找所有訪問者的IP地址
- 26. 在Android中獲取網絡IP地址
- 27. 如何從iPhone中找到網絡服務的IP地址
- 28. 計算網絡的IP地址
- 29. 網絡計算機的IP地址
- 30. 修改IP和MAC-地址的網絡
如果你想更快,平同時所有IP:'Ping.SendAsync'。 – igrimpe
我剛剛運行了pinging命令,就像這個 'for/l%n在(1,1,255)中執行ping 192.168.10。%x' with process.start()然後再讀取arp表項查找每個ip地址在網絡中。但是這非常慢。需要做到這一點。 –
@MehbubeArman,網絡中有多少IP地址,什麼是「足夠快」 –