Устройства Samsung: двойная сеть

У меня есть следующая настройка: устройство Wi-Fi, которое НЕ подключено к Интернету, например, дрон или устройство IoT. Данные устройства должны быть загружены в Интернет.

Хотя можно подключиться к обеим сетям в приложении с помощью ConnectivityManager, невозможно использовать мобильный Интернет вне приложения. Устройства имеют Android 6.0 или выше, поэтому он должен фактически поддерживаться системой Android. Но мне кажется, что Samsung не реализовал эту поддержку.

Как мне использовать мобильный интернет, например, для получения почты или push-уведомлений, когда я подключен к Wi-Fi, у которого нет самого интернета.

Спасибо.

Ответы (1)

Подобные вопросы задавались здесь:

Однако из-за описания вознаграждения я попытаюсь обобщить эти факты и немного расширить их, поскольку ответы не были отмечены как принятые.

Короткий ответ: возможно иметь двойную сеть, но обходные пути немного отличаются.


  1. Из этого источника: Легко переключайтесь между WiFi и сотовой связью с помощью Multipath-TCP. Вы можете использовать Multi-TCP.

Multipath TCP (MPTCP) — это Multipath-TCP — это расширение TCP, позволяющее параллельно использовать несколько интернет-соединений. Multipath-TCP уже реализован для ядра Linux, но еще не интегрирован в официальное ядро ​​основной ветки разработки.

Исходный код (и некоторые предварительно скомпилированные ядра, включая сборки Android) можно найти здесь: http://multipath-tcp.org

Дополнительный источник со ссылкой на устройство Samsung: MPTCP на устройствах Android и MultiPath TCP — реализация ядра Linux .


  1. В другом источнике включите беспроводную связь и 4G одновременно Пользователи утверждают, что они смогли включить двойную сеть с помощью следующего обходного пути (цитируется):

    1. Отключите Wi-Fi обычным способом (из пользовательского интерфейса телефона), если он еще не выключен.

    Все следующие шаги выполняются в корневой оболочке:

    1. загрузить драйверы

      busybox insmod /system/lib/modules/cfg80211.ko busybox insmod /system/lib/modules/wlan.ko

    2. запустите wpa_supplicant, чтобы подключиться к первой доступной беспроводной сети. Файл wpa_supplicant.conf, который я перечисляю ниже, автоматически поддерживается телефоном при подключении к новым сетям. Если вам нужен больший контроль (например, подключение только к определенной сети), скопируйте файл wpa_supplicant.confкуда-нибудь, измените его по мере необходимости и укажите его в командной строке.

    wpa_supplicant -B -Dnl80211 -iwlan0 -c/data/misc/wifi/wpa_supplicant.conf

    1. dhcpcd

    busybox pkill dhcpcd rm /data/misc/dhcp/* dhcpcd wlan0

    1. проверить маршрут

    busybox route

    Для меня это показывает исходное значение по умолчанию первым в списке (проходит через rm net_usb0), за которым следует новый, настроенный для беспроводной локальной сети wlan0. Traceroute показывает трафик, исходящий первым.

    Теперь, в этот момент, если вы попытаетесь включить Wi-Fi нормально с телефона, это не сработает. Чтобы это работало:

    ifconfig wlan0 down ifconfig wlan0 unplumb rmmod wlan rmmod cfg80211

    И вы можете снова включить беспроводную связь

Альтернативно со сценарием:

# enable dual-networking:
pkill dhcpcd
svc wifi disable
svc data enable
netcfg wlan0 up
cd /data/misc/wifi/.
wpa_supplicant -B -Dnl80211 -iwlan0 -c/data/misc/wifi/wpa_supplicant.conf
dhcpcd wlan0
ip route add x.x.x.x via x.x.x.y # add any desired local route

# disable dual-networking:
ip route del x.x.x.x/x via x.x.x.y
pkill dhcpcd
pkill wpa_supplicant 
rm -rf /data/misc/wifi/wlan0
netcfg wlan0 down
svc wifi disable
svc data disable

(Для запуска этих скриптов и рута необходим скрипт-раннер; вы можете получить его здесь: SH Script Runner

И отметили:

Он работает отлично, но обратите внимание, что на самом деле вы не видите, как включается значок Wi-Fi, но если вы запустите, netcfg | grep UPвы увидите, что wlan0интерфейс запущен и работает (а также rmnet_usb0 mobile data interfaceоба они будут включены и будут иметь ожидаемый IP-адрес). адреса), и вы можете получить доступ к своей локальной сети, в то время как ваши мобильные данные 3g/4g обеспечивают ваш маршрут по умолчанию во внешний мир.


  1. Другие обходные пути:

Использование Super Download Lite

Разработчики приложения утверждают, что оно может выполнять двойную сеть на устройствах Android, объединяя сети 3G/4G и Wi-Fi.


  1. Изменение таблицы маршрутизации

Другой источник: http://ironings4.rssing.com/chan-3701516/all_p2.html .

Предоставлены подробные сведения о создании сценария bash для изменения таблицы ротации, чтобы обеспечить работу 3G/4G с Wi-Fi. Вот сценарий:

pkill com.android.phone sleep 30 route add -net 10.0.0.0 netmask 255.0.0.0 dev ppp0 route add -net 15.0.0.0 netmask 255.0.0.0 dev ppp0

Выше приведен пример для пары диапазонов адресов для перенаправления на 3G-соединение с таблицей маршрутизации через оболочку Linux для использования INTRANET через ppp0для нескольких диапазонов адресов, в то время как все остальные адреса назначения обычно проходят через Wi-Fi.

Хитрость здесь заключается в том, чтобы приложение на телефоне (или, может быть, это служба called com.android.phone), вероятно, связанное с радиоинтерфейсом 3G, зависало, когда вы подключены к Wi-Fi, индикатор сигнала 3G погаснет на несколько секунд и вскоре после этого вернется в нормальное состояние, но на этот раз значки H(SDPA) и Wifi будут отображаться в области уведомлений в правом верхнем углу экрана.


  1. В другой статье: Пусть Wi-Fi и 3G-соединение работают вместе, взломав ConnectivityService.java (перенесено на форумы XDA) Предлагается, как выполнить задачу, взломав службу подключения:

Полностью процитировано:

«Цель проекта COIN — одновременное использование Wi-Fi и 3G-соединений. Таким образом, это конфликтует с политикой службы подключения, но нет конфигурации для редактирования политики, и она жестко запрограммирована. Вы можете найти подсказку в функции ConnectivityService.java:handleConnect.

Наше текущее решение довольно жесткое, оно заключается в том, чтобы замаскировать глаза службы подключения, изменив ее запись обработчика сообщений следующим образом:

// must be stateless – things change under us.
 private class MyHandler extends Handler {
 @Override
 public void handleMessage(Message msg) {
 NetworkInfo info;
 //added by COIN to disable Connectivity Service
 int networkState = 8; //not any following state
 /*use static google dns server for wifi and 3g*/
 if (msg.what == NetworkStateTracker.EVENT_STATE_CHANGED) {
 SystemProperties.set(“net.dns1″, “8.8.8.8″);
 SystemProperties.set(“net.dns2″, “8.8.4.4″);
 bumpDns();
 }
 //////////////////////////////////////////////
 //switch (msg.what) {
 switch (networkState) {
 case NetworkStateTracker.EVENT_STATE_CHANGED:
 info = (NetworkInfo) msg.obj;
 int type = info.getType();

…..

And then compile the modified ConnectivityService.java in the android source code tree, you can get an new services.jar file in framework directory. Replace the existing services.jar on the cell phone with the following adb commands, then reboot the phone

 adb shell “mount -o rw,remount -t yaffs2 /dev/block/mtdblock3 /system”
adb shell “chmod 0777 /system/framework”
adb push services.jar /system/framework
 adb shell “chmod 0644 /system/framework/services.jar”
adb shell “chmod 0755 /system/framework”
.”

Заключение

Хотя я не мог протестировать некоторые обходные пути самостоятельно, я узнал, что большинство из них могли работать в более ранних сборках Android (основываясь на доказательствах), поэтому я не уверен, применимо ли то же самое в Android 6. Эта функция, вероятно , быть реализованы с помощью новых технологий, о чем свидетельствует описанная технология Multipath TCP. Для всех обходных путей требуется root.

Надеюсь, это принесет немного света.

Рекомендации

(входит в основной текст)

Сейчас 2017 год. Задолго до мобильных устройств люди писали настольные приложения, подключающиеся к нескольким сетевым интерфейсам одновременно. Это нужно было решать на уровне приложения, а не системы. iOS прекрасно поддерживает это, как и Linux, Windows, OS X. Разработчики из команды Android сломали Linux, который они использовали для создания Android, и представили в ядре триггерный переключатель для переключения между Wi-Fi и 3G. Очень грустный. Некоторые разработчики пытались удалить это в течение нескольких лет, но это было настолько сильно зашито в ядре, что они сдались.