首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C# Mono可以创建多平台的隧道接口吗?

C# Mono可以创建多平台的隧道接口吗?
EN

Stack Overflow用户
提问于 2014-02-03 10:19:22
回答 1查看 318关注 0票数 1

在过去的两天里,我一直未能找到解决这个问题的办法:

C# Mono或受支持的第三方框架是否可以用于在三个主要平台(OSX、Windows )的虚拟接口上创建和管理第二层隧道?

在高层次上,像Hamachi或Tunngle这样的应用程序将是我想要在基本水平上实现的一个真实世界的例子。

这个问题背后的意图是,是否有可能编写有效的跨平台代码,或者我是否需要使用特定于平台的代码来实现虚拟接口。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-02-03 10:56:25

这要看情况了。由于L2TP实际上是使用UDP数据报完成的,所以没有理由不能在C#中实现它。但是,将其与操作系统集成(作为虚拟接口驱动程序等)这或多或少是不可能的--我认为唯一真正的方法是有一个小的本机包装器,它调用大部分工作的托管代码。

换句话说,您可以用.NET编写Hamachi。编写Hamachi网络适配器是一个棘手的部分。另外,如果您只想向应用程序添加L2TP功能,就没有问题(而不是TcpClient/UdpClient等等,您只需要使用自己的类与L2TP类通信)。但是,将其集成到IP基础设施确实需要编写驱动程序,而驱动程序通常是纯本地的。

可能有一些现成的解决方案,有虚拟网络适配器,可以调用DLL,但我不知道任何。一种非常不安全的方法也是在套接字调用上创建钩子,但我不打算详细说明,因为这是一个非常棘手的问题,而且总体来说是个糟糕的主意:D

换句话说,您可以选择使用一种混合方法--为您想要支持的所有平台提供最小的本地驱动程序,并让它们调用您的托管库来完成所有实际工作--然后托管库可以独立于平台(只要Mono在那里得到支持:)。

现在,每个操作系统可能都有自己的虚拟专用网客户端,您可以从.NET中清晰地使用它。然而,这也意味着您的应用程序必须能够分别支持每个OSes和它们的不同的VPN客户端--这将是一个棘手的问题。

如果您想要编写自己的网络接口驱动程序,在Windows上开始的一个很好的方法是driver Development,它有一些NIC驱动程序的示例源代码。Windows使用NDI (Specification),它甚至对*nix家族的OSes也有一定的支持,因此相对来说,这样做可能比较容易--但是不要忘记,您仍然在编写一个驱动程序。除非您对C/C++/ASM、OS内核和驱动程序模型有丰富的经验,否则您可能不在这里。这就是导致BSOD的原因:)

还有一些相关技术,如TDI (传输驱动程序接口)或WFP (Windows过滤平台),这些技术可以在用户空间而不是内核/驱动程序空间中实现。然而,这些都是Windows技术。您必须在您想要支持的另一个OSes上找到相应的功能,并且您必须做一些神奇的工作来使它在一个跨平台应用程序中工作。在进行所有这些操作时,您希望保持性能--这需要在.NET中进行非常仔细的编程(用.NET编写可靠的代码很容易,但要获得最先进的性能就更难了)。C/C++/ASM正好相反--快速完成事情相对容易,但可靠性受到影响)。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21524654

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档