我是IPC的新手,我正在尝试实施一种安全的IPC方法(与加密无关)。
我正在使用Visual Studio 2010开发一个C ++系统(但将移植到其他平台Linux / MacOS / FreeBSD),这个系统有一个需要接收的进程“A”并将XML发送到其他进程“B “在同一台计算机上,但会存在14个过程,例如”B“(B1,B2,...,B14)需要向进程”A“发送/接收XML。
进程“A”将充当每个进程“B”之间的代理/桥接,进程“B”必须发送的所有数据/ XML将被发送到进程“A”,并且只是进程“ “将把数据/ XML发送到进程”B“。
我正在寻找一种在方法“A”和“B1 ... B14”之间交换这种数据的IPC方法。共享内存听起来不错,但任何进程都可以写入/读取地址,因此这不安全(我知道可以设置权限访问)。
我正在尝试找到一种IPC方法:
必须是本地唯一的方法,我需要避免远程连接。
出于安全原因,当进程打开“通信通道”以发送/接收数据时,其他进程不能使用相同的“通道”(与共享内存或Boost消息队列不同)写在这个频道,或NamedPipe可能打开其他实例与给名称),我想避免假/恶意进程。 TCP听起来不错,因为两个进程不可能在同一个端口上监听(但不是本地的)。
3-流程“A”将是一项服务,某些流程“B”也将作为服务运行,而其他流程“B”将作为非特权用户运行,因此这不一定是仅限管理员的功能。
4-这个项目将被代码关闭,所以我不能使用基于GPL许可证的代码/ lib。
5-如果可能,跨平台(Windows / Linux / MacOS / FreeBSD)。
有人可以建议合适的IPC技术,无论是内置在操作系统中还是需要第三方库?
答案 0 :(得分:3)
简答:
答案很长:
在 Windows 平台上,有以下常用选项:
令人遗憾的是,以上都不属于本地性质。文件由存储访问共享,由于常见的RPC / LPC路由,管道可用,IP是路由/转发配置的主体(即使使用环回)。
我个人建议在Win32上使用管道。它们或多或少地像Linux上的本地套接字(尽管有一些差异)。
在 Linux 平台上:
管道和本地套接字是安全的,并且在不同的场景中,每个套管都有自己的好处。由于您有多个客户端/单服务器方案,我倾向于本地(AF_LOCAL)套接字编程。您可以使用命名套接字(使用基于文件的访问控制)或匿名套接字。这两个选项都非常安全(除非攻击者获得本地访问权限)。
<强>链接强>
http://msdn.microsoft.com/en-us/library/windows/desktop/aa365780(v=vs.85).aspx http://manpages.ubuntu.com/manpages/lucid/man7/unix.7.html