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

时间:2012-10-30 16:16:21

标签: c# client ip device simulation

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

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

此类应用需要什么? TCP客户端/监听器?我之前从未做过这样的事情所以请温柔一点:)

2 个答案:

答案 0 :(得分: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

More netsh examples

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

答案 1 :(得分:1)

如果我理解正确,不幸的是,这并不容易,因为您需要虚拟化网络适配器来完成您想要的工作。 IP地址绑定到nic(物理或逻辑),而不是可以在更高层代码中指定的IP地址。 VMWare Workstation确实包含了Visual Studio的一个插件,所以也许你可以用它来生成许多虚拟的nics并以编程方式为它们分配ip,但是否则你需要编写虚拟网卡驱动程序(可能是用非.NET语言)来完成它,如果您不使用现有的虚拟化技术。您可以在一个网卡上堆叠许多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