【问题标题】:How to mimic an IP Address - Device Simulator Required如何模拟 IP 地址 - 需要设备模拟器
【发布时间】:2012-10-20 01:07:08
【问题描述】:

我是新来的...一直在四处寻找帮助,但我想我会加入并寻求一些指导。

我正在寻找可以创建多个“假”设备的应用。他们需要一个 IP 地址,我猜他们能够响应 ping。能够响应 WMI 也很好。有点像模拟器。我想创建多达 50,000 台设备,但即使从 1 台开始也会有所帮助。

这样的应用需要什么? TCP 客户端/监听器?我以前从来没有做过这样的事情,所以请温柔:)

【问题讨论】:

  • 我很好奇windows能支持多少网卡。请告诉我们在添加大量网络适配器后,您机器上的 CPU 和 RAM 使用率发生了什么变化。
  • 一张网卡可以有多个IP地址。这就是你要问的吗?

标签: c# client ip device simulation


【解决方案1】:

您可以安装虚拟网络适配器的(驱动程序包含在 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

More netsh examples

编辑:删除了在这种情况下无用的信息。

【讨论】:

  • 我试图“欺骗”的软件只会看到具有多个 IP 地址的 1 个设备。不太确定如何从一台设备模拟多个 IP 地址。
  • 我添加了如何有效添加多个地址的信息,但是 50000 是一个可怕的数字,您可能会遇到问题。
  • 感谢您的更新,但这仍将被视为 1 台设备(从被测软件中可以看出)。
  • 我添加了有关虚拟网络设备的信息和有助于添加许多虚拟设备实例的命令行工具。
  • @Kamil...感谢您的帮助。我会看看虚拟网络适配器。
【解决方案2】:

如果我对您的理解正确,不幸的是,这并不容易,因为您需要虚拟化网络适配器来完成您想要的工作。 IP 地址绑定到 nic(物理的或逻辑的),而不是可以在更高层代码中指定的东西。 VMWare Workstation 确实包含 Visual Studio 的插件,因此也许您可以使用它来生成许多虚拟网卡并以编程方式为其分配 ip,但否则您需要编写虚拟网卡驱动程序(可能使用非 .net 语言)来完成它,如果您不使用现有的虚拟化技术。您可以在 NIC 上堆叠多个 IP 地址,但与之通信的计算机将知道它们都是同一个网络实体。如果你没问题,那么只需将你想要的所有 IP 添加到你拥有的卡中。

关于查询的第二部分,由于您希望 IP 能够接收和发送数据,因此它们的地址必须是可路由的,因此您不能只选择任何旧 IP 地址。如果你在 NAT 墙后面没问题,你可以使用 10.x.y.z 来寻址它们,但在 nat 的外部,它们似乎都使用相同的公共 IP 访问外部世界。为了公开 5 万个可公开路由的 IP 地址,您首先必须注册并购买它们。

最后,您不能使用 TCPClient 来执行 Echo/Ping,因为它们使用 ICMP 协议,而是使用 System.Net 和 System.Net.NetworkInformation 命名空间。下面是一些发送 ping 的 VB 代码,只是为了给你它的味道:

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
  • 真的。因此“只是为了味道”。 VB -> C# 是微不足道的,尤其是对于这个类。
猜你喜欢
  • 2013-02-27
  • 2012-03-07
  • 1970-01-01
  • 2012-05-29
  • 1970-01-01
  • 2010-12-15
  • 2011-05-18
  • 1970-01-01
  • 2015-05-14
相关资源
最近更新 更多