python非特权ICMP

发布于 2021-01-29 17:51:32

答案通常归结为“使用具有root特权的第三方模块”或“使用系统的ping命令并解析输出”。在本地方法中,icmplibM.
Cowles和J.
Diemer的ping.py

明确提到了对root特权的需求,以及scapy
手册

因此,从这一方面来说,在本地发送没有特殊特权的ICMP ping似乎是不可能的。system
ping命令确实以某种方式进行管理,但其手册页并未说明如何进行。另一方面,icmp手册页似乎说有可能:

非特权ICMP
     可以使用SOCK_DGRAM套接字类型打开ICMP套接字,而无需
     需要root特权。内容简介如下:

     套接字(AF_INET,SOCK_DGRAM,IPPROTO_ICMP)

     面向数据报的ICMP套接字提供了部分可用功能-
     能够原始ICMP套接字。仅IMCP请求以下消息
     可以发送以下类型:ICMP_ECHO,ICMP_TSTAMP或ICMP_MASKREQ。

因此,至少根据icmp看来,这是允许的。那么,为什么所有的python工具都无法做到这一点呢?python工具是否太通用,并且希望特权套接字上的任何工作都可以特权?是否可以在C中编写一个可以在没有root特权的情况下ping的ping函数,并以此扩展python?有人这样做吗?我只是误解了这个问题吗?

关注者
0
被浏览
277
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    ping程序安装为setuid root。这样,任何用户都可以使用该程序,并且仍然能够打开原始套接字。

    打开原始套接字后,通常会删除根特权。

    通常,您需要使用原始套接字才能正确执行ICMP,并且通常会限制原始套接字。因此,这根本不是python的错。

    关于上面有关ICMP的内容,显然许多实现实际上并没有很好地支持这些标志组合。因此,大多数实现可能仅使用它们“了解”在大多数/所有体系结构上的工作方式。



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看