Resposta curta: Você não pode fazer com um usuário normal.
Resposta longa: Para marcar pacotes, você precisa ser um usuário root ou pelo menos um usuário com o recurso SO_MARK
(precisa ser definido como root):
SO_MARK no soquete (7) :
SO_MARK (since Linux 2.6.25) Set the mark for each packet sent through this socket (similar to the netfilter MARK target but socket-based). Changing the mark can be used for mark-based routing without netfilter or for packet filtering. Setting this option requires the CAP_NET_ADMIN capability.
O pedaço de código em ping_common.c de iputils que confirma esta teoria:
#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
Para saber mais sobre as capacidades: man capacidades (7) e capacidades (7 ) visão geral .
Se você quiser ir mais longe em recursos com todos os outros binários do sistema, isso é uma boa maneira de investigá-los. Envolve a compilação do kernel, portanto, pode não ser adequado para o ambiente de produção.
Utilidade de marcação ICMP:
Como está descrito em páginas de manual :
-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.
E, como explicado em uma pergunta superusuário , esse recurso pode ser útil ao sondar o ambiente de rede multilink / multiroute, onde você precisa forçar que um pacote ICMP passe por um "fluxo" específico.
Exemplo prático. Anfitrião 1:
$ ping -m 10 <host>
Host 2. Altere a política padrão de INPUT
para DROP
e aceite pacotes apenas do ip de origem da rota específica que possui a marca 10 no host 1:
# iptables -P INPUT DROP
# iptables -A INPUT -s <IP_SOURCE_MARK_10> -p icmp -j ACCEPT
Isso já foi explicado aqui . Novamente, ele será melhor usado para depurar decisões de roteamento (se você tiver mais de um caminho entre dois hosts), já que um tcpdump -nevvv -i <interface> src host <source_host>
será mais que suficiente para apenas testar "chegada do pacote icmp".