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

里士满

在过去的两天里,我一直无法找到解决方案的答案:

可以使用C#Mono或受支持的第三方框架在3个主要平台(OSX,Windows,Linux)上的虚拟接口上创建和管理第2层隧道吗?

在高层次上,像Hamachi或Tunngle这样的应用程序将是我想要在基本层次上实现的目标的真实示例。

这个问题的目的在于,是否有可能编写有效的跨平台代码,或者我是否必须诉诸于平台特定的代码来实现虚拟接口。

a安

那要看。由于L2TP实际上是使用UDP数据报完成的,因此没有理由不能在C#中实现它。但是,将它与操作系统(作为虚拟接口驱动程序等)集成起来几乎是不可能的-我希望唯一的真实方法是拥有一个小的本机包装程序,该包装程序调用完成大部分工作的托管代码。

换句话说,您可以在.NET中很好地编写Hamachi。编写Hamachi网络适配器是棘手的部分。另外,如果您只是想向应用程序添加L2TP功能,那也没有问题(代替TcpClient / UdpClient等,您只需使用自己的与L2TP类进行通信的类即可)。但是,将其集成到IP基础结构确实需要您编写驱动程序,该驱动程序通常是纯本机区域。

可能是有些具有虚拟网络适配器且可以调用DLL的现成解决方案,但是我不知道有什么解决方案。一种非常不安全的方法也将是在Socket调用上创建钩子,但是我将不赘述,因为这非常棘手,而且总体上是个坏主意:D

换句话说,您可以选择使用混合方法-为要支持的所有平台使用最少的本机驱动程序,然后让他们调用托管库来完成所有实际工作-托管库可以独立于平台(只要那里支持Mono即可:)。

现在,每个操作系统可能都有自己的VPN客户端,您可以从.NET方便地使用它。但是,这还意味着您的应用程序将必须能够分别支持这些OS以及它们各自的VPN客户端-这非常棘手。

如果您想编写自己的网络接口驱动程序,在Windows上启动的一个好方法是驱动程序开发套件,其中包含一些NIC驱动程序的示例源代码。Windows使用NDI(http://en.wikipedia.org/wiki/Network_Driver_Interface_Specification),即使在* nix系列的OS上也有一些支持,因此可能相对容易地做到这一点-但不要忘记,您重新编写驱动程序。除非您对C / C ++ / ASM和OS内核以及驱动程序模型有丰富的经验,否则您可能不在这里。这就是导致蓝屏死机的原因:)

还有一些相关技术,例如TDI(传输驱动程序接口)或WFP(Windows筛选平台),可以在用户空间而不是内核/驱动程序空间中完成所有这些操作。但是,这些是Windows技术。您必须在要支持的其他OS上找到等效的产品,并且必须做一些魔术才能使其在一个跨平台应用程序中都能正常工作。在执行所有这些操作的同时,您要保持性能-这需要在.NET中进行非常仔细的编程(在.NET中编写可靠的代码很容易,但是要获得最先进的性能则更加困难。C/ C ++ / ASM恰恰相反-快速执行操作相对容易,但是可靠性会受到影响。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Consulo IDE for C#mono和Unity3d,可以吗?

来自分类Dev

用于C#mono和Unity3d的Consulo IDE,可以吗?

来自分类Dev

使用C#mono的WindowsAzure.Storage

来自分类Dev

“-+”运算符c#MONO 2.10.12

来自分类Dev

使用C#mono的WindowsAzure.Storage

来自分类Dev

C#mono的奇怪编译器错误

来自分类Dev

将C#Mono从Windows移植到Mac

来自分类Dev

在Linux下从Java调用C#mono代码

来自分类Dev

C#Mono httplistener不写HTTP标头

来自分类Dev

OpenVPN可以使用现有的隧道设备代替动态创建新的隧道设备吗?

来自分类Dev

我可以在C ++中创建一个匿名的即时类(接口的实现)吗

来自分类Dev

从SSH隧道创建网络接口

来自分类Dev

C#可以隐藏继承的接口吗?

来自分类Dev

C ++ 20:概念可以接口方法吗?

来自分类Dev

C#.NET与C#Mono之间的库兼容性

来自分类Dev

如何在C#Mono中执行Linux命令行

来自分类Dev

C#Mono Linux-抓取全局剪贴板的内容

来自分类Dev

C#Mono Interop-无法识别的配置节dllmap

来自分类Dev

C#Mono Console:如何解决输出中的第一行

来自分类Dev

C#Mono Interop-无法识别的配置节dllmap

来自分类Dev

Stripe 可以代替 Google IAB 用于多平台应用程序吗?

来自分类Dev

C#接口可以要求或指定特定的类吗?

来自分类Dev

C ++接口可以从具有完整实现的类继承吗?

来自分类Dev

接口的名称可以与内部的名称不同吗?[c ++]

来自分类Dev

使用SWIG为perl创建C ++接口吗?

来自分类Dev

多平台C ++项目结构

来自分类Dev

多平台类设计C ++

来自分类Dev

我可以在C#的子接口中覆盖父接口方法吗?

来自分类常见问题

我可以使用SSH隧道转发MySQL命令吗?

Related 相关文章

热门标签

归档