Откуда Android знает, что он должен направлять разрешенное приложение vpn на tun0?

/*
Cut the string without breaking any words, UTF-8 aware 
* param string $str The text string to split
* param integer $start The start position, defaults to 0
* param integer $words The number of words to extract, defaults to 15
*/
function wordCutString($str, $start = 0, $words = 15 ) {
    $arr = preg_split("/[\s]+/",  $str, $words+1);
    $arr = array_slice($arr, $start, $words);
    return join(' ', $arr);
}

Использование:

$input = 'Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna liqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.';
echo wordCutString($input, 0, 10); 

Это выводит первые 10 слов.

Функция preg_split используется для разделения строки на подстроки. Границы, вдоль которых должна быть разбита строка, задаются с использованием шаблона регулярных выражений.

preg_split функция принимает 4 параметра, но только первые 3 относятся к нам прямо сейчас.

Первый параметр - шаблон. Первый параметр - это шаблон регулярных выражений, вдоль которого должна быть разбита строка. В нашем случае мы хотим разбить строку на границы слов. Поэтому мы используем предопределенный класс символов \s, который соответствует символам пробела, таким как пробел, вкладка, возврат каретки и фид строки.

Второй параметр - строка ввода Второй параметр - это длинная текстовая строка, которую мы хотим для разделения.

Третий параметр - лимит Третий параметр указывает количество подстрок, которые должны быть возвращены. Если вы установите предел на n, preg_split вернет массив из n элементов. Первые n-1 элементы будут содержать подстроки. Последний элемент (n th) будет содержать остальную часть строки.

1
задан zums 2 March 2019 в 05:22
поделиться

1 ответ

Это основано на политике маршрутизации. Ядро Linux может работать с несколькими таблицами маршрутизации и правилами, которые определяют, для какого трафика используется конкретная таблица маршрутизации. Вы можете увидеть эти правила с помощью ip rule, если iproute2 доступно в вашей системе. Маршруты в определенной таблице могут быть перечислены с ip route list table <nr/name> (используйте all как имя, чтобы увидеть маршруты во всех таблицах).

Правила могут соответствовать различным свойствам, связанным с сетевым пакетом (или их комбинацией), например, IP-адреса, входящие / исходящие интерфейсы, метки Netfilter или UID процессов. Последнее, в частности, используется для исключения / включения конкретных приложений. Каждое приложение запускается уникальным пользователем со своим UID. Это позволяет контролировать, использует ли конкретное приложение таблицу маршрутизации, которая направляет трафик на устройство TUN.

Например, использование VPN исключительно для трех приложений добавляет правила с этими селекторами:

... uidrange 10010-10010 lookup 1049 
... uidrange 10062-10062 lookup 1049 
... uidrange 10094-10094 lookup 1049 

Таблица маршрутизации 1049 (это изменяется для каждого нового экземпляра VPN) содержит маршрут, который направляет трафик на устройство TUN. .

С другой стороны, если те же три приложения исключены из VPN, селекторами являются:

... uidrange 0-10009 ...
... uidrange 10011-10061 ...
... uidrange 10063-10093 ...
... uidrange 10095-99999 ...

Как вы можете видеть, трафик со всех UID (в диапазоне 0-99999), кроме три ранее замеченных направлены в таблицу маршрутизации для устройства TUN.

0
ответ дан ecdsa 2 March 2019 в 05:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: