当前位置: 首页 > 面试题库 >

python非特权ICMP

陶锋
2023-03-14
问题内容

答案通常归结为“使用具有root特权的第三方模块”或“使用系统的ping命令并解析输出”。在本地方法中,icmplib和M.
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?有人这样做吗?我只是误解了这个问题吗?


问题答案:

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

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

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

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



 类似资料:
  • 问题内容: 我一直在使用go-ping库进行无特权的ping,并在golang中计算网络的各种统计信息。代码段为-> 它工作正常,但是现在它开始抛出:-“侦听ICMP数据包时出错:套接字:权限被拒绝”错误。有人知道背后的原因吗?我正在使用的Go版本是go1.7.4。 问题答案: 确保您的设置没有任何改变。如果我事先根据Github的说明设置了net.ipv4.ping_group_range,则在

  • 所谓非 prop 特性,就是指它可以直接传入组件,而不需要定义相应的 prop。 尽管为组件定义明确的 prop 是推荐的传参方式,组件的作者却并不总能预见到组件被使用的场景。所以,组件可以接收任意传入的特性,这些特性都会被添加到组件的根元素上。 例如,假设我们使用了第三方组件bs-date-input,它包含一个 Bootstrap 插件,该插件需要在input上添加data-3d-date-p

  • 问题内容: 我正在尝试创建一个仅用户可读且可写的文件()。 这样做是唯一的方法吗? 理想情况下,我希望能够使用关键字,以便我可以自动关闭对象。有没有更好的方法来做我在上面做的事情? 问题答案: 有什么问题?即使已使用打开文件,也将关闭文件。

  • 问题内容: 我目前正在使用Oracle Database Express Edition 11g处理一些选项。考虑下面的小代码示例,其中一些用户向其他用户授予某些特权: 用户A是表T的创建者,并执行以下操作。 现在执行。因为没有指定约束,则操作要么取消,否则将有一个废弃的特权,或同时删除的权限和。 现在我的问题是:该语句是否实际上已取消或同时删除和特权?或者换句话说,就是执行该revoke语句,无

  • 主要内容:SetGID(SGID)对文件的作用,SetGID(SGID)对目录的作用前面学习了 SetUID,那么,什么是 SetGID 呢?很简单,当 s 权限位于所属组的 x 权限位时,就被称为  SetGID,简称  SGID 特殊权限。例如: [root@localhost ~]# ll /usr/bin/locate -rwx--s--x. 1 root slocate 35612 8月24 2010 /usr/bin/locate 与 SUID 不同的是,SGID 既

  • 在讲解《 权限位》一节时提到过,其实除了 rwx 权限,还会用到 s 权限,例如: [root@localhost ~]# ls -l /usr/bin/passwd -rwsr-xr-x. 1 root root 22984 Jan  7  2007 /usr/bin/passwd 可以看到,原本表示文件所有者权限中的 x 权限位,却出现了 s 权限,此种权限通常称为  SetUID,简称  S