【问题标题】:Acquire an IP address from dhcp server for my C# app - Like Virtual Machines从我的 C# 应用程序的 dhcp 服务器获取 IP 地址 - 像虚拟机
【发布时间】:2009-09-16 14:15:29
【问题描述】:

我正在开发一个多套接字连接的应用程序(一个 TCP 警报监视器)。目前,为了模拟警报,我制作了在虚拟机上运行的小型应用程序(即,因为虚拟机具有不同的 IP)来模拟警报端点。

我想做的是在我运行“服务器”(即第一个应用程序)的同一台机器上模拟警报,除了我希望这些模拟警报具有不同的 IP。我不希望我的模拟与第一个应用程序使用相同的 IP 运行(例如,服务器是 192.168.1.4;我希望模拟是 192.168.1.10,其他是 192.168.1.11 等;都住在同一台机器上,就像虚拟机可以做到的那样)。

“桥接网络”模式下的虚拟机可以从 DHCP 服务器获得不同的 IP(这就是我得到这个想法的地方)。所以,我有点不知道在哪里调查以完成任务,我的问题是:

如何以编程方式制作我的模拟应用程序以通过 DHCP 获取自己的 IP 地址? (或者,考虑到 .NET Framework,这不可能吗?)

朝觐-

【问题讨论】:

  • 大多数 VM 网络解决方案使用实际的网络适配器驱动程序,并将其桥接到您的 LAN 适配器,然后通过 DHCP 获取其 IP。您也许可以实现 Loopback 驱动程序来做您想做的事。在 Google 上搜索 Microsoft Loopback 适配器。
  • DHCP 所做的只是从池中为您分配一个 IP 地址 - 有什么阻止您自己选择 IP 地址吗?
  • 我当然可以选择ip。我不知道以编程方式执行此操作的方法...类似于 MyApplication.IP = IP("192.168.0.1")。换句话说,我知道如何打开一个端口并对其进行监听,但我不知道如何为我的应用“超越”一个 ip。
  • 感谢您提供有关 Microsoft Loopback Adapter 的答案,我现在将阅读有关该主题的内容。

标签: c# networking sockets dhcp


【解决方案1】:

您当然可以与 DHCP 服务器通信——数据包格式记录在 RFC 2131 中。从 C# 中执行此操作相对简单。

然而,这一切只是从 DHCP 服务器的池中“窃取”一个 IP 地址。它实际上并没有将其绑定到网络堆栈。

听起来您仍然需要让您的应用程序侦听此 IP 地址。除非将此 IP 地址分配给计算机上的网络适配器,否则这将不起作用。

简而言之:您需要多个网络适配器,或一个多宿主网络适配器。在这种情况下,您最好让它通过 DHCP 自行解决。

另一方面,如果您的所有流量都是本地流量,请安装“Microsoft Loopback Adapter”,并为其分配一组 IP 地址。

【讨论】:

  • 感谢您的想法。我真的完全迷失了(“我接下来要读什么”的情况)。我将阅读有关 Microsoft Loopback Adapter 的信息,然后接受答案。再次感谢您。
【解决方案2】:

你当然可以在 C# 中做到这一点,但我怀疑是否有一个现有的类可以做到这一点(这不是正常的事情!)

您可能最终不得不自己接收/发送数据包。

我设法找到了以下可能有用的链接:

http://social.msdn.microsoft.com/Forums/en-US/wsk/thread/836c2150-583c-43a6-93b3-0e3202c2e2f5

(我知道它说创建一个 DHCP 服务器,但从查找 DHCP 协议工作原理而言,它可能是一个很好的起点)

话虽如此,我想您在从不同的 IP 地址请求租用 IP 地址时可能会遇到一些问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-07-03
    • 1970-01-01
    • 2019-04-24
    • 2016-02-02
    • 1970-01-01
    • 2010-11-07
    • 2015-09-04
    相关资源
    最近更新 更多