【问题标题】:Emulating a virtual host for UDP communication模拟虚拟主机进行 UDP 通信
【发布时间】:2014-07-23 16:19:31
【问题描述】:

首先,这个问题与 Apache 中的虚拟主机无关。

我的网络地址如下:1.1.1.0

我在这个网络上有几个主机:1.1.1.1、1.1.1.2、1.1.1.3 和 1.1.1.4

第一个主机发送一个广播 UDP paquet 应答并期望其他主机回答他。

我的开发机器 (1.1.1.4) 是否可以模拟以下虚拟主机:1.1.1.5、1.1.1.6 等?

我在 MacOS 10.9 上使用来自 Qt 5.2.1 的 QUdpSocket,但我愿意接受任何其他可以帮助我解决问题的技术。

【问题讨论】:

    标签: udp virtualization


    【解决方案1】:

    这取决于你的操作系统。

    在 linux 上,您可以创建多个虚拟网络设备,并将这些设备中的每一个绑定到不同的网络地址。虚拟网络设备具有带有:xxx 数字后缀的真实设备的名称。例如,如果您的主要网络设备是eth0,您可以运行命令

    ifconfig eth0:1 1.1.1.5
    

    创建虚拟设备eth0:1并将其绑定到地址1.1.1.5。这只是暂时的(重启后会消失);如果您希望它在重新启动时恢复,您可以编辑 `/etc/network/interfaces 文件,使其看起来像:

    auto eth0
    iface eth0 inet static
        address 1.1.1.4
        netmask 255.255.255.0
        gateway 1.1.1.1
    
    auto eth0:1
        address 1.1.1.5
        netmask 255.255.255.0
    

    eth0:1 部分中缺少 gateway 意味着它不会使用此接口进行路由,因此它仅用于接收数据包和显式绑定到 IP 地址。

    【讨论】:

    • 我会尝试并告诉你它是如何工作的!我正在考虑用 ruby​​ 编写脚本!
    • 它在 MacOS 上不起作用,但我在这里找到了等价物:stackoverflow.com/a/624660/118125
    【解决方案2】:

    安装 VirtualBox (here) 并为小型 Linux 发行版制作足够大的微型磁盘映像。运行多个副本,每个副本位于不同的 IP 地址,并在每个副本中运行一个小的 netcat 脚本来侦听和发送回复。

    #!/bin/bash
    while :
    do
       command=$(nc -ul 1234)
       process $command and reply
    done
    

    或者,阅读 this 并遵循 Chris 的想法,即更轻资源!

    【讨论】:

      猜你喜欢
      • 2012-05-28
      • 2016-10-27
      • 1970-01-01
      • 2019-09-12
      • 2010-09-05
      • 2010-10-07
      • 1970-01-01
      • 2021-05-21
      • 1970-01-01
      相关资源
      最近更新 更多