Я пытаюсь использовать VpnService от Android для настройки простого устройства tun на стороне клиента, а на принимающей стороне у меня работает сервер С++.
У меня много проблем с VpnService. Это то, что мне нужно, мне нужно, чтобы ВСЕ пакеты, исходящие от телефона Android, направлялись на устройство tun, а в программе я маршрутизировал их через канал Datagram на сервер. Когда я отправляю строку, она работает нормально, но когда я отправляю другие данные через этот канал дейтаграммы, я не вижу пакетов UDP в Wireshark:\
Кроме того, я новичок в каналах Java и Datagram. Вот мой код
//To establish the tunnel
builder.setSession("MyVPNService")
.addAddress("192.168.56.0", 32)
.addDnsServer("8.8.8.4")
.addRoute("0.0.0.0", 1);
mInterface=builder.establish();
Что именно делают вышеуказанные конфигурации? Разве устройство tun не должно иметь ОДИН IP-адрес (по моему опыту работы с Linux), тогда что такое «192.168.56.0», 32». Также, когда я пытаюсь добавить маршрут «0.0.0.0», 0 весь телефон Android зависает и перезагружается: \
while (true) {
int length;
// Read the outgoing packet from the input stream.
length=in.read(packet_bytes);
//int length = in.read(packet.array());
if (length > 0) {
// Write the outgoing packet to the tunnel.
//packet.limit(length);
//tunnel.send(packe,server);
tunnel.send(packet,server);
packet.put(packet_bytes,0,length);
tunnel.write(packet);
packet.clear();
}
Thread.sleep(200);
// Read the incoming packet from the tunnel.
length = tunnel.read(packet);
if (length > 0) {
out.write(packet.array(), 0, length);
packet.clear();
// If we were sending, switch to receiving.
}
Thread.sleep(200);
}
Это та часть, где я беру его из интерфейса и помещаю в другой.