在Android应用中集成使用traceroute工具

这篇具有很好参考价值的文章主要介绍了在Android应用中集成使用traceroute工具。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

背景知识

traceroute是一个常用于Linux系统的网络工具,它可显示数据包在IP网络中所经过路由的IP地址,理想状态下可探测本机和目标地址之间的所有路由节点。

其他操作系统中也有类似的替代品,实现都大同小异。一般用法如下:

终端输入:
~ traceroute -I baidu.com
输出:
traceroute to baidu.com (39.156.66.10), 30 hops max, 60 byte packets
 1  9.102.191.130 (9.102.191.130)  0.638 ms  0.797 ms *
 2  * 9.102.250.222 (9.102.250.222)  0.745 ms  0.943 ms
 3  * * *
 4  10.200.46.253 (10.200.46.253)  1.332 ms  1.333 ms  1.332 ms
 5  * * *
 6  39.156.0.85 (39.156.0.85)  4.384 ms  4.184 ms  3.936 ms
 7  111.13.188.38 (111.13.188.38)  8.991 ms  9.029 ms  9.065 ms
 8  39.156.27.1 (39.156.27.1)  4.281 ms  4.366 ms  4.377 ms
 9  39.156.67.1 (39.156.67.1)  3.550 ms  3.561 ms  3.568 ms
10  * * *
11  * * *
12  * * *
13  * * *
14  39.156.66.10 (39.156.66.10)  3.973 ms  3.957 ms  4.015 ms

上面例子一共有14行输出结果,我们可称之为14跳,说明数据包途径了14个节点就到达了目标机器。每一跳会发送3个数据包,所以有3个对应的时间。

具体的实现原理可以直接参考Wikipedia,主要是通过不断改变TTL值来发包实现的:

程序是利用增加存活时间(TTL)值来实现其功能的。每当数据包经过一个路由器,其存活时间就会减1。当其存活时间是0时,主机便取消数据包,并发送一个ICMP TTL数据包给原数据包的发出者。
程序发出的首3个数据包TTL值是1,之后3个是2,如此类推,它便得到一连串数据包路径。注意IP不保证每个数据包走的路径都一样。

集成到Android应用

Linux实现版本的源码在此:Traceroute for Linux,可以看到居然2023年还有一次更新。既然是Linux上的程序,有没有办法在Android上运行呢?或者直接集成到App的模块中?

因为Android系统本身没有预装traceroute命令工具(就算是在Linux上,大多发行版也是需要自己额外安装的),所以不能直接通过执行命令的方式来调用。通过NDK编译traceroute源码到App中才是比较靠谱的办法。

总的来说还是比较简单的,集成上述的Linux版本源码并添加相应的mk文件,就可以编译成库了。其实已经有开源网友实现了,GitHub上也有不少例子,这个traceroute-for-android较为完美,其中的library模块可以直接参考使用,甚至可以替换其中的traceroute源码为2023年最新版,也是没有问题的。

一些问题

为什么同一跳会出现不同的IP地址

安卓手机tracert工具,Android,android,linux,网络协议,traceroute

在如图这个例子中,第4跳出现了一个不同的IP,很多人会比较疑惑。这是因为网络环境是不断变化的,发包过程中会选择更好的路由,可以参考这个链接中的解释:

Line 8 shows that some probes take different paths at the same step: the first and third probes go through 96.112.146.26, while the second probe goes through 96.112.146.22. This is because network conditions are constantly changing, which affects the routing tables. Here, the router 96.112.146.22 was a better choice for a brief period of time, so the previous one chose it in the second probe.

为什么要用“-I”参数

实际使用中我们会发现,很多主流的域名都无法成功trace到最终目标,最后几跳往往以星号结束,表示节点机器没有回应。这是为什么呢?

因为traceroute工具默认是发送UDP包来探测的,在当今这个复杂的互联网环境下,很多服务器都会因为安全机制拦截过滤掉UDP包,发送方得不到任何返回信息。所以在文章开头,你可以注意到我使用了“-I”参数,而不是默认无参。

在Traceroute for Linux源码文档中可以得知,此工具有多种发包方式,除了默认的UDP外,还可以用TCP、ICMP发包,后两者分别对应“-T”和“-I”参数,效果会比UDP好很多。

那么为什么我不使用更不容易被过滤的TCP发包呢?因为在非ROOT权限下,执行“-T”参数会有如下报错:

You do not have enough privileges to use this traceroute method.
socket: Operation not permitted

加sudo执行才不会报错。因为traceroute在使用TCP模式发包时会创建原始套接字,参考其源码:

static int tcp_init (const sockaddr_any *dest,
			    unsigned int port_seq, size_t *packet_len_p) {
  ...
	/*  Create raw socket for tcp   */
	raw_sk = socket (af, SOCK_RAW, IPPROTO_TCP);
	if (raw_sk < 0)
		error_or_perm ("socket");
  ...
}

参考自从学会原始套接字之后,我感觉掌握了整个世界,原始套接字必须有ROOT权限才能使用:

因为网络级IP数据包没有”端口“的概念,所以可以读取网络设备传入的所有数据包,这意味着什么?意味着安全性,使用了原始套接字的应用程序可以读取所有进入系统的网络数据包,也就是我们可以捕获其他应用程序的数据包,所以为了防止这种情况的发生,Linux要求所有访问原始套接字的程序都必须以root身份运行。

我们把traceroute编译到Android的App中,运行环境就在应用层,默认是没有ROOT权限的,所以“-T”参数自然也就用不了。

低版本Android系统连“-I”也用不了

经过一些兼容性测试(覆盖了6.0及以上的所有大版本),我发现在Android 9.0及以下的系统中即便是“-I”参数也会执行失败,错误信息包含“socket bind”之类的,也就是说不同Android版本的socket函数库可能实现不同,才导致了低版本连ICMP发包都不行。

解决办法有两种:文章来源地址https://www.toymoban.com/news/detail-582387.html

  1. 判断Android系统版本,在9.0及以下使用默认无参的traceroute,降级到UDP发包;10.0及以后使用“-I”参数。
  2. 通过ping命令工具来模拟traceroute,因为ping工具是Android系统默认就预装了的,可以直接在Java层通过调用命令的方式执行,其次ping本身也有参数项来设置TTL值,且默认就用ICMP发包。为此我也做了一个简单的实现,可参考:TraceRouteByPing

到了这里,关于在Android应用中集成使用traceroute工具的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 路由追踪工具 traceroute 使用技巧

    我想知道一个数据包从出发地到目的地所遵循的路由,即所有转发实体(中间的路由器)的 IP 地址。虽然不能保证所有数据包都走相同的路线,但通常都是一样的。路由信息非常有助于调试网络相关的问题。 此时使用 traceroute 工具能够输出数据包到特定目的地的完整路径。

    2024年02月06日
    浏览(37)
  • 安卓部分手机使用webview加载链接后白屏(Android低版本会出现的问题)

    大爷:小伙我这手机怎么打开你们呢这个是白屏什么都不显示。 大娘:小伙我这也是打开你们呢这功能,就是一个白屏什么也没有,你们呢的应用不会有病毒吧。 小伙:我的手机也正常; 同事:我的也正常可以显示; 小伙:你们都是什么手机型号; 大爷:我的Android7.1.1

    2024年04月15日
    浏览(44)
  • 使用Android studio,安卓手机编译安装yolov8部署ncnn,频繁出现编译错误

    从编译开始就开始出现错误,解决步骤: 1.降低graddle版本,7.2-bin  ---   降低为 6.1.1-all 2.仍旧有报错,jdk从17降为 jdk 13, 在setting配置里, 进入build,excution,deployment文件夹中,(是一个文件夹,名字长,不是三个) 进入build tools,再进入 Gradle,  如图所示, 勾选,选择

    2024年04月28日
    浏览(51)
  • mac电脑和安卓手机传输文件- Android File Transfer for mac完整安装-详细使用教程

    在Windows上,我们常常需要用USB数据线将安卓手机连接到电脑上,然后在手机和电脑之间传输各种文件。但是这种方法对Mac电脑就不怎么起作用了。由于OS X系统的特殊性,许多用户都不知道如何顺利地将安卓连接至Mac,更不用说将安卓的数据传输到Mac上了。 macOS不允许您原生

    2024年02月20日
    浏览(69)
  • SSH连接安卓手机Termux —— Android手机

    随着移动智能设备的普及,各种各样的使用需求也被开发出来,从最早的移动听音乐、看图片(MP3时代),到之后的移动视频需求(MP4时代)到现在的移动流媒体需求(智能手机看视频)。但当我们习惯这些需求后,忽然发现自己不知不觉间成了待割的韭菜(3台设备就要加钱

    2024年02月09日
    浏览(50)
  • android studio 连接安卓手机/鸿蒙手机教程

    一、配置SDK 1.点击SDK Manager ​编辑 2.选择SDK平台与SDK工具 1.SDK平台: 2.SDK工具: 二、连接手机 1.开发者模式 2.连接数据线 三、运行android studio 1.SDK平台: 安卓手机 选择手机的安卓版本, 鸿蒙手机选择10.0即可 2.SDK工具: 第一步:点击 Google USB Driver 第二步:点击 OK 如果电脑

    2024年02月05日
    浏览(66)
  • 安卓中集成高德地图

    高德开放平台 | 高德地图API 高德地图优点: 1、领先的地图渲染技术:性能提升10倍,所占空间降低80%,比传统地图软件节省流量超过90% 2、专业在线导航功能:覆盖全国364个城市、全国道路里程352万公里 3、在线导航功能:最新高德在线导航引擎,全程语音指引提示,完善

    2024年02月07日
    浏览(39)
  • Android studio 设置安卓手机

    参考这个链接 ghttps://developer.android.com/studio/debug/dev-options 列出常用手机的设置,但是我的手机不在此列 Google Pixel Settings    About phone    Build number Samsung Galaxy S8 and later Settings    About phone    Software information    Build number LG G6 and later Settings    About phone    Software info    Bui

    2024年02月13日
    浏览(38)
  • Android Studio连接安卓手机

    点击右上角红框的【SDK Manager】-【SDK Tools】。 也可以在 【tools】-【SDK Manager】-【SDK Tools】下进入。 点击Google USB Driver,下载后点ok。 右键【我的电脑】-【高级系统设置】-【环境变量】,新建变量【Android_Home】; 值为:C:UsersHuoAppDataLocalAndroidSdk;C:UsersHuoAppDataLocalAnd

    2024年02月16日
    浏览(36)
  • Android:【1】一文教你使用Camille+夜神模拟器实现安卓应用隐私合规辅助检测

    碎碎念: 不好意思最近课业上比较繁忙,一直忙于一些测试,没有按时来填坑。今天带来的是基于课程项目要求,需要完成的安卓应用行为检测Demo。 因为环境的配置花费了一些时间,做一个简单的记录,方便后续进行优化。 目录 1 工具的介绍和准备 1.1 Camille 1.2 夜神模拟器

    2024年02月01日
    浏览(84)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包