android 如何使用wireguard隧道库?

pcww981p  于 2022-12-16  发布在  Android
关注(0)|答案(2)|浏览(484)

我想使用库www.example.com:tunnel(1.0.20211029)创建一个第三方VPN应用程序com.wireguard.android有人能帮我提供任何好的资源或指导我吗?
在我的应用程序中,我正在从文件管理器导入配置文件,现在如何使用隧道库将该文件连接到服务器。
我确实遵循了https://github.com/WireGuard/wireguard-android,但是这个应用程序 Package 了很多隧道库代码。我正在寻找一个简单的例子,说明如何直接使用隧道库,而不需要使用TunnelManager和ObservableTunnel进行所有 Package 。
请指引我

egmofgnx

egmofgnx1#

UPD:添加了请求意图,因为它在第一次连接时是必需的
UPD 2:我制作了一个分步指南:https://github.com/Anton2319/Anton2319/blob/master/articles/wireguard-guide/article.md

我认为这个代码将为您工作:
在您的主Activity中,使用以下代码(替换IP、pubkey和privatekey):

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();
        }
    }
});

在主Activity所在的包中,创建此类:

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) {
    }
}

在安卓清单文件中:

<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" />
3zwjbxry

3zwjbxry2#

在我的情况下,dns地址需要添加,我把它添加到anton2319的代码和vpn工作。像这样。谢谢anton2319。

backend.setState(tunnel, UP, new Config.Builder()
                  .setInterface(interfaceBuilder.addDnsServer(InetAddress.getByName("your dns adress")).addAddress(InetNetwork.parse("10.0.0.2/32")).parsePrivateKey("privatekeybase64").build())

相关问题