6

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

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

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

4

2 回答 2

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 示例

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

于 2012-10-30T16:21:25.447 回答
1

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

在查询的第二部分,由于您希望 IP 能够接收和发送数据,因此它们的地址必须是可路由的,因此您不能只选择任何旧的 IP 地址。如果你在 NAT 墙后面没问题,你可以使用 10.xyz 来解决它们,但在 nat 的外部,它们似乎都使用相同的公共 IP 到外部世界。为了公开 50k 个可公开路由的 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
于 2012-10-30T16:32:30.000 回答