【问题标题】:Implementing UDP traceroute in Python without root在没有root的Python中实现UDP traceroute
【发布时间】:2013-06-10 15:54:09
【问题描述】:

我正在尝试在 Python 2.6 中实现 UDP traceroute 解决方案,但我无法理解为什么我需要 root 权限才能执行与操作系统附带的 traceroute 实用程序相同的操作。

运行此代码的环境将非常怀疑具有 root 权限,所以我是否更有可能不得不放弃 python 实现并编写一些东西来解析 UDP 模式下 OS 跟踪路由的输出?或者我在打开一个配置为self.rx = socket.socket(socket.AF_INET, socket.SOCK_RAW, socket.IPPROTO_UDP) 的套接字时遗漏了什么。如果没有 root 权限,似乎socket.SOCK_RAW 是无法访问的,这有效地阻止了我使用在 python 中实现它所需的数据。

【问题讨论】:

  • 您确定需要原始套接字权限才能打开 UDP 套接字吗?原始套接字是您需要 root 访问权限才能使用 traceroute 执行 ICMP 跟踪的原因。
  • @chepner 这也是我的第一个想法。但是,您确实需要一个原始套接字来监听传入的 ICMP TIME_EXCEEDED 电报,其 TTL 达到 0...
  • 对,所以我是否坚持使用 Python 作为解决方案,最好只写一些东西来消耗 os traceroute 输出?我宁愿不依赖traceroute 命令,尽管我什至不确定它是否是所有分布的标准。
  • stackoverflow.com/a/3414737/344333 可能包含解决方案,我现在正在尝试。

标签: python sockets permissions udp traceroute


【解决方案1】:

我得出的结论是,我仅限于使用subprocess 解析traceroute 的输出。 traceroute 能够通过对部分代码使用setuid 来克服root 要求,从而有效地允许该部分代码以root 身份运行。由于我无法在没有 root 权限的情况下建立这些权限,因此我不得不依赖 traceroute 的存在,因为这两种情况更有可能发生。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-06
    • 2013-03-05
    • 2015-06-03
    • 2021-07-18
    • 1970-01-01
    • 2014-07-16
    相关资源
    最近更新 更多