Câu trả lời ngắn: Bạn không thể làm với người dùng bình thường.
Câu trả lời dài: Để có thể đánh dấu các gói, bạn cần phải là người dùng root hoặc ít nhất là người dùng có SO_MARK
khả năng (cần được đặt làm root):
SO_MARK tại ổ cắm (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.
Các đoạn mã tại ping_common.c từ iputils xác nhận lý thuyết này:
#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
Để tìm hiểu thêm về các khả năng: tổng quan về khả năng của con người (7) và khả năng (7) .
Nếu bạn muốn đi xa hơn về khả năng với tất cả các nhị phân khác của hệ thống, đây là một cách tốt để thăm dò chúng. Liên quan đến việc biên dịch kernel, vì vậy nó không thể phù hợp với môi trường sản xuất.
Đánh dấu sự hữu ích của ICMP:
Như được mô tả trên các trang :
-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.
Và như đã giải thích về câu hỏi siêu người dùng , tính năng này có thể hữu ích khi thăm dò môi trường mạng đa tuyến / đa tuyến, trong đó bạn cần buộc một gói ICMP đi qua một "luồng" cụ thể.
Ví dụ thực tế. Máy chủ 1:
$ ping -m 10 <host>
Máy chủ 2. Thay đổi chính sách mặc định của INPUT
đến DROP
và chỉ chấp nhận các gói từ ip nguồn của tuyến cụ thể có dấu 10 trên máy chủ 1:
# iptables -P INPUT DROP
# iptables -A INPUT -s <IP_SOURCE_MARK_10> -p icmp -j ACCEPT
Điều này đã được giải thích ở đây . Một lần nữa, nó sẽ được sử dụng tốt hơn để định tuyến gỡ lỗi quyết định (nếu bạn có nhiều hơn một đường dẫn giữa 2 máy chủ), vì tcpdump -nevvv -i <interface> src host <source_host>
sẽ là quá đủ để chỉ thăm dò "icmp gói đến".