我看到另一个程序提供traceroute功能,但不需要root(超级用户)权限?我一直认为原始套接字必须是root,但还有其他方法吗? (我认为有人提到“supertrace”或“tracepath”?)谢谢!如何在不需要root权限的情况下运行类似traceroute的程序?
2
A
回答
3
Ping目标,逐渐增加TTL并观察“TTL超出”响应发源的位置。
1
与其使用原始套接字,有些应用程序使用更高编号的tcp或udp端口。通过在一个已知的网络服务器上的端口80上引导该tcp端口,可以对该服务器进行跟踪路由。缺点是您需要知道目标设备上打开了哪些端口才能触发它。
0
您不需要使用原始套接字发送和接收ICMP数据包。至少不在Windows上。
-1
如果你有一个现代化的Linux发行版,你可以看看traceroute(或tracepath,在traceroute去之前没有setuid)和tcptraceroute的源代码。这些都不需要RAW套接字 - 在Fedora 9上进行检查,它们不是setuid,而是使用普通用户的默认选项。
使用tcptraceroute所做的代码可能尤为重要。例如,对于地址的ICMP数据包不一定会与到端口80的TCP连接处于同一位置。
做的traceroute的strace的(作为普通用户)表明它做类似:
int opt_on = 1;
int opt_off = 0;
fd = socket(PF_INET, SOCK_DGRAM, IPPROTO_UDP)
setsockopt(fd, SOL_IP, IP_MTU_DISCOVER, &opt_off, sizeof int)
setsockopt(fd, SOL_SOCKET, SO_TIMESTAMP, &opt_on, sizeof int)
setsockopt(fd, SOL_IP, IP_RECVTTL, &opt_on, sizeof int)
...然后读出CMSG结果的数据。
0
ping and traceroute使用ICMP协议。像UDP和TCP一样,这可以通过普通套接字API访问。只有UDP和TCP端口号小于1024才能被使用,除了root以外。 ICMP可供所有用户免费使用。
如果你真的想看看ping和traceroute是如何工作的,你可以从CodeProject下载他们的示例C代码实现。
简而言之,他们简单地打开一个ICMP套接字,traceroute使用setsockopt改变TTL的增量直到达到目标。
相关问题
- 1. 如何在没有root权限的情况下安装perlbrew?
- 2. 如何在没有root权限的情况下安装OpenCv 3.1.0?
- 3. 我该如何运行需要root权限的perl脚本?
- 4. 如何让我的程序在不需要安装程序的情况下在不同的机器上运行?
- 5. AllJoyn需要root权限吗?
- 6. 如何在不需要管理权限的情况下在本地主机上运行WCF IPC(http)?
- 7. 如何在脚本中执行需要root权限的命令?
- 8. 在没有root权限的情况下管理git仓库
- 9. 在没有root权限的情况下安装subversion
- 10. 在没有root权限的情况下安装qlfw3
- 11. 如何在C程序中使用root权限运行bash?
- 12. 从python内部运行需要root权限的命令
- 13. 在没有管理员权限的情况下运行安装程序
- 14. 如何在没有root权限的情况下访问写入的文件?
- 15. 没有root权限的情况下升级pip
- 16. Android - 如何在没有root权限的情况下从/ data/data/*读取文件?
- 17. 如何在没有SuperSU的情况下授予root访问权限
- 18. 如何在没有root权限的情况下在我的应用程序中使用外部数据库?
- 19. 为什么我需要root权限才能运行GDB?
- 20. SFAuthorizationView在不更改权限的情况下授权应用程序首选项
- 21. OAuth 2 - 如何在不提供权限的情况下登录
- 22. 如何在需要超级用户权限的程序上运行Valgrind?
- 23. 如何在没有JIT的情况下运行程序?
- 24. 如何从程序获取root权限
- 25. 锁定应用程序是否需要root权限?
- 26. 需要root权限到android应用程序
- 27. 为什么gdb需要root权限来调试用户程序?
- 28. Android系统需要root权限吗?
- 29. 原始套接字需要root权限
- 30. bash脚本可能需要root权限
听起来像它会工作,但有点复杂。 – UnkwnTech 2008-09-16 21:02:08
这实际上是traceroute的功能。 – Ferruccio 2008-09-16 21:03:55
如何在不使用C中的原始套接字的情况下增加TTL? – brian 2008-09-16 21:04:32