Android 指定网络接口收发 Socket 数据

简介: 上次写了一篇 Android Ping IPv6 地址的教程,这个工作的目的就是想通过 Volte 网络发送 SIP 消息。但是 Android 默认的网络环境是 Wifi、2G/3G/4G, 不会默认通过 Volte 网络发送数据。

上次写了一篇 Android Ping IPv6 地址的教程,这个工作的目的就是想通过 Volte 网络发送 SIP 消息。但是 Android 默认的网络环境是 Wifi、2G/3G/4G, 不会默认通过 Volte 网络发送数据。因此需要通过一些方法来指定网络接口。

指定网络接口

首先介绍下 NetworkInterface 这个类

NetworkInterface 这个类表示由名称组成的网络接口和分配给这些网络接口的 IP 地址列表。用于标识所在多播组的本地接口。

因此,Android 获取所有网络接口就可以通过 NetworkInterface 的 getNetworkInterfaces() 、 getInetAddress() 这个方法来实现

  • getNetworkInterfaces() 方法返回本机上的所有接口。枚举至少包含一个元素,可能只显示了一个本地回环接口。
  • getInetAddress() 方法返回绑定某个网络接口下的所有 IP 地址。

NetworkInterface.getNetworkInterfaces() 在调试中显示的结果如下


img_11a5bddc704fc90711f53fdfd1e00c7c.png
调试信息

图中可以看出所有的网口列表,展开第一个显示了它的一些属性。其中 name 、 interfaceIndex 都是网络接口的唯一标识符号。
此时,如果我们需要指定网络接口,就可以根据它的属性来实现。

例子:获取 rmnet_data7 网口的 IPv6 地址


// 获取所有网口
List<NetworkInterface> interfaces = Collections.list(NetworkInterface.getNetworkInterfaces());
for(NetworkInterface iface : interfaces){
  if(iface.getDisplayName().equals("rmnet_data7")){ // 判断网口名称
    Enumeration<InetAddress> nifAddresses = iface.getInetAddresses();
    // 遍历 rmnet_data7 下所有 IP 地址
    while(nifAddresses.hasMoreElements()){
      InetAddress ni = nifAddresses.nextElement();
      Log.i("interface",ni.toString());
    }
  }
}

运行可以看到 log 中打印了 rmnet_data7 的 IP 地址

测试指定网口

接下来看看数据到底是不是通过这个网络接口发送出去了。
我通过代码建立了一个 TCP 连接,然后发送数据给 SIP 服务器,由于这不是重点,我就不贴代码了。
运行程序,通过 tcpdump 抓包后显示发送成功,并抓到了返回数据

img_2e8b5813b53f474d9fae0eb6b1cdda09.png
wireshark

黑色标记行为发送数据, 橙色标记行为接收数据。

目录
相关文章
|
1月前
|
安全 算法 网络安全
量子计算与网络安全:保护数据的新方法
量子计算的崛起为网络安全带来了新的挑战和机遇。本文介绍了量子计算的基本原理,重点探讨了量子加密技术,如量子密钥分发(QKD)和量子签名,这些技术利用量子物理的特性,提供更高的安全性和可扩展性。未来,量子加密将在金融、政府通信等领域发挥重要作用,但仍需克服量子硬件不稳定性和算法优化等挑战。
|
1月前
|
存储 安全 网络安全
云计算与网络安全:保护数据的新策略
【10月更文挑战第28天】随着云计算的广泛应用,网络安全问题日益突出。本文将深入探讨云计算环境下的网络安全挑战,并提出有效的安全策略和措施。我们将分析云服务中的安全风险,探讨如何通过技术和管理措施来提升信息安全水平,包括加密技术、访问控制、安全审计等。此外,文章还将分享一些实用的代码示例,帮助读者更好地理解和应用这些安全策略。
|
20天前
|
弹性计算 安全 容灾
阿里云DTS踩坑经验分享系列|使用VPC数据通道解决网络冲突问题
阿里云DTS作为数据世界高速传输通道的建造者,每周为您分享一个避坑技巧,助力数据之旅更加快捷、便利、安全。本文介绍如何使用VPC数据通道解决网络冲突问题。
73 0
|
1月前
|
安全 网络安全 数据安全/隐私保护
网络安全与信息安全:从漏洞到加密,保护数据的关键步骤
【10月更文挑战第24天】在数字化时代,网络安全和信息安全是维护个人隐私和企业资产的前线防线。本文将探讨网络安全中的常见漏洞、加密技术的重要性以及如何通过提高安全意识来防范潜在的网络威胁。我们将深入理解网络安全的基本概念,学习如何识别和应对安全威胁,并掌握保护信息不被非法访问的策略。无论你是IT专业人士还是日常互联网用户,这篇文章都将为你提供宝贵的知识和技能,帮助你在网络世界中更安全地航行。
|
2月前
|
网络协议 Shell 网络安全
解决两个 Android 模拟器之间无法网络通信的问题
让同一个 PC 上运行的两个 Android 模拟器之间能相互通信,出(qiong)差(ren)的智慧。
32 3
|
2月前
|
存储 安全 网络安全
云计算与网络安全:如何保护您的数据
【10月更文挑战第21天】在这篇文章中,我们将探讨云计算和网络安全的关系。随着云计算的普及,网络安全问题日益突出。我们将介绍云服务的基本概念,以及如何通过网络安全措施来保护您的数据。最后,我们将提供一些代码示例,帮助您更好地理解这些概念。
|
2月前
|
弹性计算 Kubernetes 网络协议
阿里云弹性网络接口技术的容器网络基础教程
阿里云弹性网络接口技术的容器网络基础教程
阿里云弹性网络接口技术的容器网络基础教程
|
2月前
|
机器学习/深度学习 数据采集 算法
目标分类笔记(一): 利用包含多个网络多种训练策略的框架来完成多目标分类任务(从数据准备到训练测试部署的完整流程)
这篇博客文章介绍了如何使用包含多个网络和多种训练策略的框架来完成多目标分类任务,涵盖了从数据准备到训练、测试和部署的完整流程,并提供了相关代码和配置文件。
62 0
目标分类笔记(一): 利用包含多个网络多种训练策略的框架来完成多目标分类任务(从数据准备到训练测试部署的完整流程)
|
2月前
|
存储 缓存 Ubuntu
配置网络接口的“IP”命令10个
【10月更文挑战第18天】配置网络接口的“IP”命令10个
75 0
|
2月前
|
网络协议 测试技术 网络安全
Python编程-Socket网络编程
Python编程-Socket网络编程
27 0