Кросс-компиляция для ARM без установки чего-либо

Краткий ответ: С обычным пользователем не обойтись.

Длинный ответ: Чтобы иметь возможность маркировать пакеты, вы должны быть пользователем root или, по крайней мере, пользователем с возможностью SO_MARK (необходимо установить как root):

SO_MARK в socket (7) :

  SO_MARK (начиная с Linux 2.6.25) 
Установите метку для каждого пакета, отправляемого через этот сокет (аналогично 
сетевому фильтру Цель MARK, но на основе сокетов). Изменение метки 
можно использовать для маршрутизации на основе меток без netfilter или 
для фильтрации пакетов. Для установки этого параметра требуется возможность 
CAP_NET_ADMIN. 
 

Фрагмент кода в ping_common.c от iputils, который подтверждает эту теорию:

#ifdef SO_MARK
if (options & F_MARK) {
    int ret;

    enable_capability_admin();
    ret = setsockopt(sock->fd, SOL_SOCKET, SO_MARK, &mark, sizeof(mark));
    disable_capability_admin();

    if (ret == -1) {
        /* we probably dont wanna exit since old kernels
         * dont support mark ..
        */
        fprintf(stderr, "Warning: Failed to set mark %d\n", mark);
    }
}
#endif

Чтобы узнать больше о возможностях : man возможности (7) и возможности (7) обзор .

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

Полезность маркировки ICMP:

Как описано на manpages :

-m mark     
    use mark to tag the packets going out. This is useful for variety of reasons
    within the kernel such as using policy routing to select specific outbound processing.

И как объясняется в вопросе суперпользователя , эта функция может быть полезна при проверке многоканального / многоуровневого сетевая среда, в которой вам нужно заставить ICMP-пакет проходить через один определенный «поток».

Практический пример. Хост 1:

$ ping -m 10 

Хост 2. Измените политику по умолчанию INPUT на DROP и принимайте пакеты только от исходного IP-адреса определенного маршрута, имеющего отметку 10 на хосте 1:

# iptables -P INPUT DROP
# iptables -A INPUT -s  -p icmp -j ACCEPT

Это уже объяснялось здесь .Опять же, его лучше использовать для отладки решений о маршрутизации (если у вас более одного пути между двумя хостами), поскольку tcpdump -nevvv -i src host будет более чем достаточно просто проверить "прибытие пакета icmp".

1
07.08.2015, 16:57
0 ответов

Теги

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