Tùy chọn -m không hoạt động trong lệnh ping


7

Tôi đã học pinglệnh Linux và các tùy chọn của nó, và đọc về -mtùy chọn được sử dụng để đánh dấu gói gửi đi. Khi nhận, chúng ta có thể lọc kết quả gói được đánh dấu trước.

Tôi đang cố gắng đặt dấu cho gói, nhưng tôi nhận được một thông báo cảnh báo:

$ ping -m 10 server
PING server (192.168.2.2) 56(84) bytes of data.
Warning: Failed to set mark 10
64 bytes from server (192.168.2.2): icmp_req=1 ttl=64 time=0.182 ms
64 bytes from server (192.168.2.2): icmp_req=2 ttl=64 time=0.201 ms

Vì vậy, tại sao nó không đánh dấu? Làm thế nào tôi có thể đánh dấu một gói bằng cách sử dụng -mtùy chọn?


Bạn đã thử điều này như root?
Vinz

Không. Tôi không có quyền root.

Bản phân phối và phiên bản Linux nào?
fpmurphy

Linux ltsp64 3.2.0-33-generic # 52-Ubuntu SMP Thu 18 tháng 10 16:19:45 UTC 2012 i686 i686 i386 GNU / Linux

Câu trả lời:


16

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_MARKkhả 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 DROPvà 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".


Tại sao nó chỉ bị hạn chế cho người dùng root?

1
Bởi vì nó liên quan đến việc đánh dấu gói, do đó, thao tác ổ cắm. Đó là một vectơ cho các cuộc tấn công có thể có thể khai thác bất cứ điều gì liên quan đến ngăn xếp mạng và có thể là hạt nhân. Đó là lý do tại sao bạn không có quyền "đánh dấu ping" trên hầu hết các bản phát hành như mặc định và bạn không nên cho phép trừ khi bạn cần nó vì một số lý do đặc biệt.

khi nào nó hữu ích

Khi bạn cần ping một máy chủ này sang máy chủ khác và bạn cần "đồng ý" về một dấu hiệu đặc biệt để gỡ lỗi. Một ứng dụng khác có thể là gỡ lỗi đa cấp, trong đó bạn đánh dấu các liên kết của mình và bạn cần gửi icmp thông qua một vlan / interface / adsl_link cụ thể.

Tôi không thể hiểu. Xin vui lòng cho tôi thêm một chút thông tin?
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.