如何模拟IP地址-需要设备模拟器

7
我是新来的...已经在寻求帮助,但想加入并请求一些指导。
我想创建一个可以创建多个“虚假”设备的应用程序。它们需要一个IP地址,我猜测能够响应ping。能够响应WMI也很好。有点像模拟器。我想创建多达50,000个设备,但即使从1开始也会有所帮助。
这样的应用程序需要什么?TCP客户端/监听器? 我以前从未做过这样的事情,请温柔点 :)

我很好奇Windows可以支持多少网络适配器。请告诉我们在为机器添加了大量网络适配器后,CPU和RAM使用情况发生了什么。 - Kamil
你可以在单个网络卡上拥有多个IP地址。这是您要了解如何执行的内容吗? - Gabe
3个回答

3

您可以安装虚拟网络适配器(驱动程序已包含在Windows操作系统中),但我从未使用过它。虚拟网络适配器的驱动程序在此处:%WINDIR%\Inf\Netloop.inf

您可以使用名为DevCon的命令行工具通过脚本添加设备,如下所示:

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

安装过程只需要几秒钟(在我的Core Duo 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

更多netsh命令示例

编辑:删除不相关的信息。


我试图“欺骗”的软件只会看到一个具有多个IP地址的设备。不太确定如何模拟一个设备的多个IP地址。 - user1786176
我添加了如何有效添加多个地址的信息,但50000是一个可怕的数字,你可能会遇到问题。 - Kamil
谢谢您的更新,但是从测试软件中看来,这仍然会被视为1个设备。 - user1786176
我添加了关于虚拟网络设备的信息,以及帮助添加多个虚拟设备实例的命令行工具。 - Kamil
@Kamil...感谢你的帮助。我会看一下虚拟网络适配器。 - user1786176
我很好奇,所以我使用DevCon安装了几个虚拟网络适配器。它们像普通的网络适配器一样工作。我的Apache服务器正在响应,卡片对ping有响应,我使用虚拟卡IP地址将MMC连接到“另一台计算机”。WMI也应该可以正常工作。玩得开心。 - Kamil

1
如果我理解你的意思正确的话,很遗憾这并不容易,因为你需要虚拟化网络适配器来完成你想要的工作。IP地址绑定在nic(物理或逻辑)上,而不是可以在更高层代码中指定的东西。VMWare Workstation确实包含一个Visual Studio插件,所以也许你可以使用它来生成许多虚拟nic并以编程方式分配它们的IP,但如果你不使用现有的虚拟化技术,否则你需要编写虚拟网络卡驱动程序(可能是非.NET语言)来完成它。你可以在一个nic上堆叠许多IP地址,但与之通信的计算机将知道它们都是同一网络实体。如果这对你来说没问题,那么只需将所有想要的IP添加到你拥有的卡上即可。
接下来是你查询的第二部分,因为你希望这些IP能够接收和发送数据,它们的地址必须是可路由的,因此你不能随便选择任何IP地址。如果你可以接受被NAT墙壁隔离,你可以使用10.x.y.z来寻址它们,但在NAT的外部,它们都将显示为使用相同的公共IP地址。为了公开50k个可路由的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

我相信他要求的是C#,而不是VB。 - Cole Tobin
返回翻译后的文本:true。因此“只是为了体验”。对于这个类来说,VB转C#很容易。 - Frank Thomas

0

我知道这个帖子已经很老了,但我想为任何可能访问这个问题的人发布我的想法。

之前的答案已经明确表明了实现OP试图实现的功能非常困难。但是,我认为如果有人需要这样的功能进行测试,有一种非常简单的方法可以实现它。

我们可以在Node或.NET或任何舒适的环境中创建一个简单的Web应用程序。 Web应用程序的UI将允许我们执行以下操作。

  1. 创建具有IP的设备
  2. 将IP标记为在线或离线。

如果IP在线,则可以ping,否则不行。

同时,Web应用程序还公开了一个API,当提供IP时,告诉我们IP是否可ping。这样我们就可以模拟对IP的ping操作。让我们把这个Web应用程序命名为PingMock

现在,在原始应用程序中,我们可以创建一个TestPingService,它不是ping,而是向PingMock发送HTTP请求。这样,我们将能够测试我们的业务逻辑,而无需访问实际的IP。

在测试业务逻辑时,PingService 的最终输出很重要,而不是输出来自哪里。这就是单元测试的进行方式。

PingMock Web 应用程序只是一个例子。我们可以以任何我们喜欢的方式模拟 Ping 操作。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接