【发布时间】: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