2012-10-30 81 views
6

我在這裏是新的......一直在挖掘一些幫助,但我想加入並要求一些指導。如何模仿一個IP地址 - 設備模擬器需要

我正在創建一個可以創建多個「假」設備的應用程序。他們需要一個IP地址,我猜測能夠響應ping。能夠迴應WMI也很好。有點像模擬器。我想創建多達50,000個設備,但即使從1開始也會有所幫助。

這樣的應用程序需要什麼? TCP客戶端/監聽器?我從來沒有做過這樣的事情,所以請溫柔:)

+0

我好奇多少網卡窗口可以支持。請在添加大量網絡適配器後告訴我們您的計算機上的CPU和RAM使用情況。 – Kamil

+0

您可以在一張網卡上有多個IP地址。這就是你要問怎麼做? – Gabe

回答

3

您可以安裝虛擬網絡適配器的(驅動程序包含在Windows操作系統),但我從來沒有使用過。驅動程序的虛擬網絡適配器是在這裏:%WINDIR%\Inf\Netloop.inf

您可以使用命令調用DevCon通過腳本來添加設備行工具,就像這樣:

devcon -r install %WINDIR% \Inf\Netloop.inf *MSLOOP 

安裝可惜的是需要幾秒鐘(在我的酷睿雙核2.0的筆記本電腦) 。

如果你需要配置很多網卡,你可以使用命令行netsh

例子:

netsh in ip set address "Local Area Connection" static 10.0.0.1 255.0.0.0 10.0.0.1 1 
netsh in ip add address "Local Area Connection" 10.0.0.2 255.0.0.0 
netsh in ip set address "Local Area Connection 2" 10.0.0.3 255.0.0.0 
netsh in ip set address "Local Area Connection 3" 10.0.0.4 255.0.0.0 
netsh in ip set dns "Local Area Connection" static 10.0.0.250 
netsh in ip set wins "Local Area Connection" static 10.0.0.250 

你可以轉儲/導出當前的網絡配置文件(看配置如何現在看起來):

netsh interface dump > file.txt 

More netsh examples

編輯:刪除信息不在這種情況下很有用。

+0

我試圖「欺騙」的軟件只會看到具有多個IP地址的1臺設備。不太確定如何模擬1臺設備的多個IP地址。 – user1786176

+0

我添加了信息如何有效地添加多個地址,但50000是一個可怕的數字,你可能有問題。 – Kamil

+0

感謝您的更新,但這仍然會被視爲1個設備(從被測軟件中看出)。 – user1786176

1

如果我正確地理解了你,不幸的是這不會很容易,因爲你需要虛擬化網絡適配器來完成你想要的工作。 IP地址綁定到nic(物理或邏輯),而不是可以在更高層代碼中指定的東西。 VMWare Workstation確實包含了Visual Studio的插件,所以也許你可以使用它來生成許多虛擬nics並以編程方式將它們分配給ip,但除此之外,你需要編寫虛擬網卡驅動程序(可能以非.NET語言)來執行它,如果你不使用現有的虛擬化技術。您可以將很多IP地址堆疊在一個網卡上,但與之通信的計算機將知道它們都是相同的網絡實體。如果這對你很好,那麼只需將你想要的所有IP添加到你所擁有的卡上即可。

到您的查詢的第二部分,因爲您希望IP能夠接收和發送數據,所以他們的地址必須是可路由的,因此您不能只選擇任何舊的IP地址。如果你很好地支持NAT牆,你可以使用10.x.y.z來解決它們,但是在nat的外部,它們似乎都在使用與外部世界相同的公共IP。爲了公開可路由的IP地址,您首先必須註冊併購買它們。

最後你不能使用TCPClient做Echo/Ping,因爲它們使用ICMP協議,而是使用System.Net和System.Net.NetworkInformation命名空間。下面是一些VB代碼發送ping只是爲了給你它的味道:

Imports System 
Imports System.Net 
Imports System.Net.NetworkInformation 


Public Class Pinger 

    <System.Diagnostics.DebuggerNonUserCode()> _ 
     Public Sub New() 
     MyBase.New() 

     'This call is required by the Component Designer. 
     InitializeComponent() 

    End Sub 


    Public Shared Function CanHostBePinged(ByVal IPAddr_DNS_OR_Host_Name As String) As Boolean 
     Dim p As New Ping 
     Dim po As New PingOptions 

     po.Ttl = 256 
     po.DontFragment = False 

     Dim stringOut As String = "ABCDEFGHIJKLMNOPQRSTUVWXYZABCDE" 
     Dim streamOut As Byte() = System.Text.Encoding.ASCII.GetBytes(stringOut) 

     Try 
      Dim reply As PingReply = p.Send(IPAddr_DNS_OR_Host_Name, 30, streamOut) 
      If reply.Status = IPStatus.Success Then 
       Return True 
      Else 
       Return False 
      End If 
     Catch ex As Exception 
      Return False 
     End Try 

    End Function 


End Class 
+0

謝謝,我會研究VMWare插件......乾杯 – user1786176

+0

我相信他問C#,而不是VB –

+0

真實。因此「只爲味道」。 VB - > C#是微不足道的,特別是對於這個類。 –