如何使用wireguard隧道库?

Use*_*987 9 java android wireguard

我想使用库 com.wireguard.android:tunnel (1.0.20211029) 创建第三方 VPN 应用程序,任何人都可以帮助我为我提供任何好的资源或指导我吗?

在我的应用程序中,我从文件管理器导入 .config 文件,现在如何使用隧道库将该文件连接到服务器。我正在使用 java 。

我确实遵循了https://github.com/WireGuard/wireguard-android但该应用程序包装了很多隧道库代码。我正在寻找一个简单的示例,说明如何直接使用隧道库,而无需使用 TunnelManager 和 ObservableTunnel 进行所有包装。

请指导我

Ant*_*319 11

UPD:添加了请求意图,因为它在第一次连接时是必要的

UPD 2:我制定了分步指南:https://github.com/Anton2319/Anton2319/blob/master/articles/wireguard-guide/article.md

我认为这段代码适合你:

在您的主要活动中,使用此(替换 IP、公钥和私钥):

Tunnel tunnel = new WgTunnel();
Intent intentPrepare = GoBackend.VpnService.prepare(this);
if(intentPrepare != null) {
    startActivityForResult(intentPrepare, 0);
}
Interface.Builder interfaceBuilder = new Interface.Builder();
Peer.Builder peerBuilder = new Peer.Builder();
Backend backend = new GoBackend(this);

AsyncTask.execute(new Runnable() {
    @Override
    public void run() {
        try {
            backend.setState(tunnel, UP, new Config.Builder()
                      .setInterface(interfaceBuilder.addAddress(InetNetwork.parse("10.0.0.2/32")).parsePrivateKey("privatekeybase64").build())
                        .addPeer(peerBuilder.addAllowedIp(InetNetwork.parse("0.0.0.0/0")).setEndpoint(InetEndpoint.parse("yourhost:51820")).parsePublicKey("pubkeybase64").build())
                        .build());

        } catch (Exception e) {
            e.printStackTrace();
        }
    }
});
Run Code Online (Sandbox Code Playgroud)

在与主要活动相同的包中,创建此类:

package package.name.here;

import com.wireguard.android.backend.Tunnel;

public class WgTunnel implements Tunnel {
    @Override
    public String getName() {
        return "wgpreconf";
    }

    @Override
    public void onStateChange(State newState) {
    }
}
Run Code Online (Sandbox Code Playgroud)

在AndroidManifest.xml中:

<application ...>
    <service android:name="com.wireguard.android.backend.GoBackend$VpnService" android:permission="android.permission.BIND_VPN_SERVICE" android:exported="true">
                <intent-filter>
                    <action android:name="android.net.VpnService"/>
                </intent-filter>
    </service>
</application>
<uses-permission android:name="android.permission.INTERNET" />
Run Code Online (Sandbox Code Playgroud)

  • 我将更新我在 github 上的文档,以包含许多人要求的断开连接示例 (3认同)