14

有时我必须编写软件来与位于 Cisco VPN 中的特定服务器建立套接字。我只是像没有 VPN 一样编写我的软件(使用标准套接字库)。当需要运行该程序时,我使用计算机上安装的客户端软件手动连接到 VPN,然后运行该程序本身。

但是,最好编写软件以利用能够通过 VPN 直接通信的专用套接字库,而无需使用任何已安装的客户端软件。

这是一些说明我想要的功能的Java代码:

String vpnHost = ...;
String vpnUser = ...;
String vpnPassword = ...;
VPNConnection vpnConnection = new CiscoVPNConnection(vpnHost, vpnUser, vpnPassword);

String serverHost = ...;
int serverPort = ...;
Socket socket = vpnConnection.openSocket(serverHost, serverPort);

是否可以在不安装任何客户端软件的情况下与 VPN 建立这样的连接?

4

3 回答 3

10

这取决于 VPN 服务器的配置方式。

大多数 VPN 产品使用 IPSEC,一种用于加密 TCP/IP 连接的标准协议。大多数产品还使用 ISAKMP(互联网安全架构密钥管理协议,也是一种标准)来设置会话。IPSEC 和 ISAKMP 的源代码很容易获得,并且可能已经安装在您的系统上。

现在是坏消息:虽然我已经提到的一切都是标准的,但可以与 ISAKMP 一起使用的身份验证方案几乎都是专有的。两种“标准”身份验证方案是预共享密钥和 X.509 证书。如果 VPN 服务器配置为允许其中任何一个,那么您就有机会。否则,您将无法真正使用 VPN,因为该协议是真正专有的,并且几乎不可能进行逆向工程,因为身份验证对话是加密的。

一条更简单的路径:您真的需要 VPN,还是有办法通过 SSL 进行隧道传输?我认为 Java 支持 SSL;您可以创建所需的安全套接字并从那里开始。

如果您知道您正在使用什么客户端系统,那么请考虑为该系统调用 Cisco VPN 客户端。

否则,您将不得不复制 VPN 客户端的功能。VPN 客户端使用 ISAKMP 执行身份验证和会话设置,并将结果安装到内核中以创建 VPN 连接。ISAKMP 实现可用;您只需要弄清楚正在使用什么身份验证并尝试进行设置。此时您将编写自己的 VPN 客户端。

于 2009-05-22T18:56:37.673 回答
2

我在 linux 上使用 vpnc 包来连接到我公司的 Cisco VPN,因为我们没有兼容的 linux 客户端。但是 vpnc 是用 c 编写的,所以你必须执行一个端口。

于 2009-05-22T18:44:54.700 回答
2

您可以阅读官方 cisco 文档,然后您可以使用这些数据创建一个 bat 文件:vpnclient connect [Connection name] pwd [Password] 并断开连接。将其包含到您的 java 程序中: Runtime.getRuntime().exec("cmd /c start [Path to bat file]");

于 2013-04-22T13:44:59.133 回答