2012-10-30 82 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#是微不足道的,特别是对于这个类。 –