当前位置: 首页 > news >正文

Android 网络配置

ip tables 和 ip route 是两个不同的工具,它们在不同的阶段执行不同的功能。ip route 是用来管理和控制路由表的,它决定了数据包应该从哪个网卡或网关发送出去。ip tables 是用来配置、管理和控制网络数据包的过滤、转发和转换的,它根据用户定义的规则对数据包进行检查、修改或丢弃。

一般来说,ip route 先于 ip tables 执行,因为路由表是在内核中最先处理数据包的部分。当内核收到一个数据包时,它会先查看路由表,找到合适的出口网卡或网关,然后将数据包发送出去。在发送之前,内核会根据 ip tables 中的规则对数据包进行过滤、转发或转换。例如,内核可能会根据 NAT 规则更改数据包中的源地址或目标地址,或者根据 filter 规则接受或丢弃数据包。

 

 

ip rule,ip tables,ip route 的顺序是这样的:

  • 当内核收到一个数据包时,它会先查看 ip rule 中的路由策略,根据数据包的特征(如源地址、目标地址、标记等)选择一个路由表。
  • 然后,内核会在选定的路由表中查找匹配的路由条目,根据数据包的目标地址选择一个出口网卡或网关。
  • 接着,内核会将数据包发送到 iptables 的 mangle 表和 nat 表的 prerouting 链,根据用户定义的规则对数据包进行修改或转换(如更改 IP 头、执行 DNAT 等)。
  • 然后,内核会根据修改后的数据包重新查看 ip rule 和 ip route,选择一个新的出口网卡或网关。
  • 接着,内核会将数据包发送到 iptables 的 filter 表的 forward 链,根据用户定义的规则对数据包进行过滤或转发(如接受、丢弃、拒绝等)。
  • 然后,内核会将数据包发送到 iptables 的 mangle 表和 nat 表的 postrouting 链,根据用户定义的规则对数据包进行修改或转换(如更改源地址、执行 SNAT 等)。
  • 最后,内核会将数据包发送出去。

adb root

adb shell

改变网卡网址

ifconfig eth0 192.168.0.167 upea905746d7c142afbdca66a63e42dad4.png

添加虚拟网卡

 ifconfig eth0:0 192.168.10.10 up

以上的命令就可以在eth0网卡上创建一个叫eth0:0的虚拟网卡,他的地址是:192.168.10.10

e83770223efb4178bb8be5c59867bd8c.png

删除虚拟网卡

ifconfig eth0:0 down


ip route 查看路由表的内容

G8142:/ $ ip route
192.168.31.0/24 dev wlan0  proto kernel  scope link  src 192.168.31.165

 

ip rule 显示当前路由策略

Android设备中可以使用命令ip rule显示现有的路由策略,如下所示:rk3399_all:/ # ip rule
0:     from all lookup local
10000:  from all to 172.29.7.148 lookup eth0
10000:  from all fwmark 0xc0000/0xd0000 lookup legacy_system
10500:  from all iif lo oif dummy0 uidrange 0-0 lookup dummy0
10500:  from all iif lo oif eth0 uidrange 0-0 lookup eth0
13000:  from all fwmark 0x10063/0x1ffff iif lo lookup local_network
13000:  from all fwmark 0x10064/0x1ffff iif lo lookup eth0
14000:  from all iif lo oif dummy0 lookup dummy0
14000:  from all iif lo oif eth0 lookup eth0
15000:  from all fwmark 0x0/0x10000 lookup legacy_system
16000:  from all fwmark 0x0/0x10000 lookup legacy_network
17000:  from all fwmark 0x0/0x10000 lookup local_network
19000:  from all fwmark 0x64/0x1ffff iif lo lookup eth0
22000:  from all fwmark 0x0/0xffff iif lo lookup eth0
23000:  from all fwmark 0x0/0xffff uidrange 0-0 lookup main
32000:  from all unreachable
rk3399_all:/ #其中第一列表示策略号码(同时也是策略对应的索引值),可支持上万条策略,
策略号码数值越小表示该条策略的优先级越高。策略0为优先级最高的策略,
在数据包进行路由时,首先匹配该数据包是否满足策略0的规则,
即所有的数据包去 local路由表中去查找自己的路由方向,
没有找到则使用下一优先级的路由策略,这里为10000号策略,
即所有的数据包发往172.29.7.148的都从eth0网卡出去。rk3399_all:/ # ip route list table local
broadcast 127.0.0.0 dev lo proto kernel scope link src 127.0.0.1
local 127.0.0.0/8 dev lo proto kernel scope host src 127.0.0.1
local 127.0.0.1 dev lo proto kernel scope host src 127.0.0.1
broadcast 127.255.255.255 dev lo proto kernel scope link src 127.0.0.1
broadcast 172.29.0.0 dev eth0 proto kernel scope link src 172.29.7.28
local 172.29.7.28 dev eth0 proto kernel scope host src 172.29.7.28
broadcast 172.29.255.255 dev eth0 proto kernel scope link src 172.29.7.28
rk3399_all:/ #
130|G8142:/ $ ip rule ls
0:      from all lookup local
10000:  from all fwmark 0xc0000/0xd0000 lookup 99
10500:  from all oif dummy0 uidrange 0-0 lookup 1003
10500:  from all oif wlan0 uidrange 0-0 lookup 1023
13000:  from all fwmark 0x10063/0x1ffff lookup 97
13000:  from all fwmark 0x10064/0x1ffff lookup 1023
14000:  from all oif dummy0 lookup 1003
14000:  from all oif wlan0 lookup 1023
15000:  from all fwmark 0x0/0x10000 lookup 99
16000:  from all fwmark 0x0/0x10000 lookup 98
17000:  from all fwmark 0x0/0x10000 lookup 97
19000:  from all fwmark 0x64/0x1ffff lookup 1023
22000:  from all fwmark 0x0/0xffff lookup 1023
23000:  from all fwmark 0x0/0xffff uidrange 0-0 lookup main
32000:  from all unreachable

 

路由策略数据库管理命令

 

G8142:/ $ ip route
192.168.31.0/24 dev wlan0  proto kernel  scope link  src 192.168.31.165G8142:/ $ ifconfig
wlan0     Link encap:UNSPEC    Driver icnssinet addr:192.168.31.165  Bcast:192.168.31.255  Mask:255.255.255.0inet6 addr: fe80::86c7:eaff:fe2d:b98/64 Scope: LinkUP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1RX packets:6644 errors:0 dropped:0 overruns:0 frame:0TX packets:6980 errors:0 dropped:0 overruns:0 carrier:0collisions:0 txqueuelen:3000RX bytes:6001248 TX bytes:1155447

 

 

 

 

kuznet@amber:~ $ ip ru ls0: from all lookup local200: from 192.203.80.0/24 to 193.233.7.0/24 lookup main210: from 192.203.80.0/24 to 192.203.80.0/24 lookup main220: from 192.203.80.0/24 lookup inr.ruhep realms inr.ruhep/radio-msu300: from 193.233.7.83 to 193.233.7.0/24 lookup main310: from 193.233.7.83 to 192.203.80.0/24 lookup main320: from 193.233.7.83 lookup inr.ruhep map-to 192.203.80.14432766: from all lookup mainkuznet@amber:~ $每行第一部分的数字是规则的优先级,接着是选择符。关键词lookup后面接着路由表识别符。如果规则要进行网络地址转换,还需要一个关键词map-to设置转换以后的地址。上面的示例非常简单,192.203.80.0/24和193.233.7.0/24组成内部网络,但是它们向外发送数据包要通过不同的路由。主机193.233.7.83和外界会话时,地址需要转换为192.203.80.144。

 

查看路由表

 

    最早的策略配置方式是写了个shell脚本,配置了如下策略,对于目的IP为77/78的都走eth0网卡。在init.rc中开启对应的服务ipruleservice,网卡启动或者链路有变化调用该服务配置策略,ipruleservice中命令如下

ip rule add to 192.168.1.78 table eth0
ip rule add to 192.168.1.77 table eth0

Iptable

#清空用户自定义链的所有规则
iptables 
查看防火墙规则
-L 通过列表显示当前防火墙的规则信息

-n 默认按照ip与端口号显示,不解析协议名称

-V 详细显示规则信息

--line-numbers 按照序号显示规则顺序

-t 指定显示规则的表

bdfab2160a4a4c84a8ea21a3b79d1dc7.jpg

3b0fb3c0cf3c41c19668dbec255a9d2a.jpg
 

43f6035d1a8f4d0f92c3c075b20cc737.jpg 

 练习一:阻止所有用户不能访问ssh远程服务
iptables -A INPUT -p tcp --dport 22 -j DROP

-A 指定链添加规则

-p 指定协议

--dport 指定目标端口

--sport 指定来源端口

-s 指定来源ip地址

-i 指定接收数据的网卡

-j 指定规则策略DROP 丢弃 ACCEPT 接受 REJECT拒绝

练习二:阻止windows远程连接到虚拟机,允许其他网段连接

iptables -A INPUT -p tcp -s 10.0.0.1 --dport 22 -j DROP

练习三:只允许windows连接,其他网段全 不允许

方法一:

liptables -A INPUT -p tcp -s 10.0.0.1 --dport 22 -j ACCEPT

iptables -A INPUT -p tcp -s 0.0.0.0/0 --dport 22 -j DROP

方法二:

iptables -A INPUT -p tcp !}s 10.0.0.1 --dport 22 -j DROP


练习四:只允许通过内网访问80端口,不允许通过外网访问80端口

方法一
iptables -A INPUT -i eth1 -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -i eth0 -p tcp --dport 80 -j DROP

方法二
iptables -A INPUT !Fi ethO -p tcp --dport 80 -j ACCEPT
 

 

APP 实际应用

public static final int TRANSPORT_BLUETOOTH = 2;
public static final int TRANSPORT_CELLULAR = 0;
public static final int TRANSPORT_ETHERNET = 3;
public static final int TRANSPORT_LOWPAN = 6;
public static final int TRANSPORT_USB = 8;
public static final int TRANSPORT_VPN = 4;
public static final int TRANSPORT_WIFI = 1;
public static final int TRANSPORT_WIFI_AWARE = 5;

考虑一个特殊的需求,某app只能通过WIFI接口去传输数据,是否可以实现?较新版本的android已经支持了该功能,通过调用setProcessDefaultNetwork()可以指定某一进程的网络接口,

该进程在创建socket时(app首先调用setProcessDefaultNetwork()),android底层会利用setsockopt函数设置该socket的SO_MARK为netId(android有自己的管理逻辑,每个Network有对应的ID),以后利用该socket发送的数据都会被打上netId的标记(fwmark 值)



 

 

 

 

 

相关文章:

Android 网络配置

ip tables 和 ip route 是两个不同的工具,它们在不同的阶段执行不同的功能。ip route 是用来管理和控制路由表的,它决定了数据包应该从哪个网卡或网关发送出去。ip tables 是用来配置、管理和控制网络数据包的过滤、转发和转换的,它根据用户定…...

【网络通信 -- WebRTC】Open WebRTC Toolkit 环境搭建指南

【网络通信 -- WebRTC】Open WebRTC Toolkit -- OWT-Server 编译安装指南 【1】OWT Server 与 Web Demo 视频会议环境搭建 【1.1】编译 OWT Server 安装依赖 ./scripts/installDepsUnattended.sh编译 scripts/build.js -t all --check 注意若不支持硬件加速则采用如下命令 s…...

文件上传漏洞(CVE-2022-30887)

简介 多语言药房管理系统(MPMS)是用PHP和MySQL开发的,该软件的主要目的是在药房和客户之间提供一套接口,客户是该软件的主要用户。该软件有助于为药房业务创建一个综合数据库,并根据到期、产品等各种参数提供各种报告…...

LeetCode-77-组合

一:题目描述: 给定两个整数 n 和 k,返回范围 [1, n] 中所有可能的 k 个数的组合。 你可以按 任何顺序 返回答案。 二:示例与提示 示例 1: 输入:n 4, k 2 输出: [[2,4],[3,4],[2,3],[1,2],[1,3],[1,4…...

Oracle中instr,rtrim,XMLPARSE,XMLAGG,GETCLOBVAL函数的使用

1:INSTR()函数 INSTR 是一个字符串函数,用于查找子字符串在源字符串中的位置。 它的语法如下: INSTR(source_string, search_string)source_string 是源字符串,即要在其中进行搜索的字符串。search_string 是要查找的子字符串。…...

java接入apiv3微信小程序支付(以java的eladmin框架为例)

一、需要准备的资料 1.小程序AppID 如:wx2e56f5****** 2.商户号 如:1641****** 3.商户API私钥路径:什么是商户API证书?如何获取商户API证书? 获取文件如下图: 如: 本地路径:E:\Env\e…...

第19节-PhotoShop基础课程-历史记录画笔工具

文章目录 前言1.历史记录画笔工具1.从当前状态创建文档2.创建新快照 2.历史记录艺术画笔工具 前言 任何记录都会被记录下来,并且可以拍快照,从历史中恢复,特别适合艺术创作的孩子 1.历史记录画笔工具 不只是画笔,所有操作记录都…...

MongoDB常用的比较符号和一些功能符号

比较符号 results collection.find({age: {$gt: 20}})功能符号 results collection.find({name: {$regex: ^M.*}})...

网络安全(黑客)技术自学

前言 一、什么是网络安全 网络安全可以基于攻击和防御视角来分类,我们经常听到的 “红队”、“渗透测试” 等就是研究攻击技术,而“蓝队”、“安全运营”、“安全运维”则研究防御技术。 无论网络、Web、移动、桌面、云等哪个领域,都有攻与防…...

C++ 引用

C 引用 引用变量是一个别名,也就是说,它是某个已存在变量的另一个名字。一旦把引用初始化为某个变量,就可以使用该引用名称或变量名称来指向变量。 C 引用 vs 指针 引用很容易与指针混淆,它们之间有三个主要的不同:…...

9.1.tensorRT高级(4)封装系列-自动驾驶案例项目self-driving-道路分割分析

目录 前言1. 道路分割总结 前言 杜老师推出的 tensorRT从零起步高性能部署 课程,之前有看过一遍,但是没有做笔记,很多东西也忘了。这次重新撸一遍,顺便记记笔记。 本次课程学习 tensorRT 高级-自动驾驶案例项目self-driving-道路分…...

稳定的 Glance 来了,安卓小部件有救了!

稳定的 Glance 来了,安卓小部件有救了! 稳定版本的 Glance 终于发布了,来一起看看吧,看看这一路的旅程,看看好用么,再看看如何使用! 前世今生 故事发生在两年的一天吧,其实夸张了…...

用友U8与MES系统API接口对接案例分析

企业数字化转型:轻易云数据集成平台助力 U8 ERPMES 系统集成 为什么选择数字化转型? 领导层对企业资源规划(ERP)的深刻理解促使了数字化转型的启动。采用精确的“N5”滚动计划,为供应商提供充分的预期信息&#xff0c…...

web UI自动化介绍

文章目录 一、web UI自动化介绍1.1 执行UI自动化测试前提1.2 Selenium介绍以及知识点梳理 二、Selenium 学习2.1 基础2.1.1 环境安装与基础使用2.1.2 web浏览器控制2.1.3 常见控件的八大定位方式2.1.3.1 八大定位方式介绍2.1.3.2 NAME、ID定位2.1.3.3 css_selector定位2.1.3.4 …...

小米13Pro/13Ultra刷面具ROOT后激活LSPosed框架微X模块详细教程

喜欢买小米手机,很多是因为小米手机的开放,支持root权限,而ROOT对普通用户来说更多的是刷入DIY模块功能,今天ROM乐园小编就教大家如何使用面具ROOT,实现大家日常情况下非常依赖的微X模块功能,体验微X模块的…...

文盘Rust -- 给程序加个日志 | 京东云技术团队

日志是应用程序的重要组成部分。无论是服务端程序还是客户端程序都需要日志做为错误输出或者业务记录。在这篇文章中,我们结合log4rs聊聊rust 程序中如何使用日志。 log4rs类似java生态中的log4j,使用方式也很相似 log4rs中的基本概念 log4rs 的功能组件也由 appe…...

C语言深入理解指针(非常详细)(五)

目录 回调函数qsort使用举例qsort函数的模拟实现sizeof和strlen的对比sizeofstrlensizeof和strlen的对比一道关于sizeof的题 回调函数 回调函数就是一个通过函数指针调用的函数 如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指…...

[docker]笔记-portainer的安装

1、portainer是一款可视化的容器管理软件,利用portainer可以轻松方便的管理和创建容器。portainer本身是一个容器,完全免费并且具有汉化版。本文介绍portainer的安装和使用。 2、安装好容器并配置好容器环境,可参照https://blog.csdn.net/bl…...

详解TCP/IP的三次握手和四次挥手

文章目录 前言一、TCP/IP协议的三次握手1.1 三次握手流程 二、TCP/IP的四次挥手2.1 四次挥手流程 三、主要字段3.1、标志位(Flags)3.2、序号(sequence number)3.3、确认号(acknowledgement number) 四、状态…...

YOLOv5算法改进(16)— 增加小目标检测层

前言:Hello大家好,我是小哥谈。小目标检测层是指在目标检测任务中用于检测小尺寸目标的特定网络层。由于小目标具有较小的尺寸和低分辨率,它们往往更加难以检测和定位。YOLOv5算法的检测速度与精度较为平衡,但是对于小目标的检测效…...

蓝桥杯官网练习题(图像模糊)

题目描述 小蓝有一张黑白图像,由 nm 个像素组成,其中从上到下共 n 行,每行从左到右 �m 列。每个像素由一个 0 到 255 之间的灰度值表示。 现在,小蓝准备对图像进行模糊操作,操作的方法为: 对…...

使用鳄鱼指标和ADX开立空头的条件,3秒讲清楚

使用鳄鱼指标和ADX开立空头的条件其实很简单,anzo capital昂首资本3秒钟讲清楚。 首先,市场行情需呈水平状态。再者,均线体系开始向上发散,给出明确的信号。最后,ADX确认该信号,要求指数上涨20%以上&#…...

RabbitMQ死信队列与延迟队列

目录 死信队列 死信队列的定义 死信队列的应用场景 死信队列的作用 死信队列架构图 死信队列代码实现 延迟队列 延迟队列的定义 延迟队列的应用场景 延迟队列的作用 延迟队列架构图 延迟队列的代码实现 死信队列 死信队列的定义 死信队列(Dead Letter …...

存储管理呀

世界太吵,别听,别看,别管,别怕,向前走 一. 存储管理 初识硬盘 机械 HDD 固态 SSDSSD的优势 SSD采用电子存储介质进行数据存储和读取的一种技术,拥有极高的存储性能,被认为是存储技术发展的未来…...

学习 BeautifulSoup 库从入门到精通

可以按照以下步骤进行: 1. 安装 BeautifulSoup: 首先,确保你已经安装了 Python。然后可以使用 pip 命令来安装 BeautifulSoup 库。在命令行中输入以下命令: pip install beautifulsoup42. 导入 BeautifulSoup: 在 …...

JavaScript基础知识总结

目录 一、js代码位置 二、变量与数据类型 1、声明变量 2、基本类型(7种基本类型) 1、undefined和null 2、String ⭐ 模板字符串(Template strings) 3、number和bigint ⭐ 4、boolean ⭐ 5、symbol 3、对象类型 1、Fun…...

技术面试与HR面:两者之间的关联与区别

🌷🍁 博主猫头虎(🐅🐾)带您 Go to New World✨🍁 🦄 博客首页——🐅🐾猫头虎的博客🎐 🐳 《面试题大全专栏》 🦕 文章图文…...

【Redis】为什么要学 Redis

文章目录 前言一、Redis 为什么快二、Redis 的特性2.1 将数据储存到内存中2.2 可编程性2.3 可扩展性2.4 持久性2.5 支持集群2.6 高可用性 三、Redis 的应用场景四、不能使用 Redis 的场景 前言 关于为什么要学 Redis 这个问题,一个字就可以回答,那就是&…...

动静态库生成使用

🔥🔥 欢迎来到小林的博客!!       🛰️博客主页:✈️林 子       🛰️博客专栏:✈️ Linux       🛰️社区 :✈️ 进步学堂       &#x1f6f0…...

LLVM编译安装

LLVM编译安装 #全量下载 git clone https://github.com/llvm/llvm-project.git #只下载最新commit版本 git clone --depth 1 https://github.com/llvm/llvm-project.git#配置 #!/bin/bash set -ex cmake -S llvm -B build -DCMAKE_INSTALL_PREFIX/data0/huozai/software/insta…...

图片设计师网站/百度数据库

SSH(安全外壳)是用于基于Linux的系统,路由器,交换机,防火墙,设备和其他资产的最常见的远程管理协议。尽管SSH守护程序提供了出色的强化功能,以增强您的身份验证方法和访问控制,但SSH…...

厦门市网站建设/如何做seo搜索引擎优化

//变量销毁unset $aa1 99; if(isset($aa1)){ unset($aa1); } var_dump($aa1);//$aa1值为null $ab 23; $ab1 &$ab; var_dump($ab,$ab1);//23 23 $ab1 20; var_dump($ab,$ab1);//20 20 unset($ab); var_dump($ab,$ab1);//null 20...

如何建设游戏平台网站/视频app推广

(一)初识LibSVM LibSVM是台湾 林智仁(Chih-Jen Lin) 教授2001年开发的一套支持向量机的库,这套库运算速度还是挺快的,可以很方便的对数据做分类或回归。由于libSVM程序小,运用灵活,输入参数少,并…...

专门做二手手机的网站/百度搜索网页

python如何识别图片中的文字,这里给个案例并附上详细步骤:模块包的安装:1、安装PIL:pip install Pillow2、安装pytesser3:pip install pytesser33、安装pytesseract:pip install pytesseract4、安装autopy3…...

彩票网站开发注意事情/刚刚发生 北京严重发生

正则表达式用于字符串处理、表单验证等场合,实用高效。现将一些常用的表达式收集于此,以备不时之需。 匹配中文字符的正则表达式: [\u4e00-\u9fa5] 评注:匹配中文还真是个头疼的事,有了这个表达式就好办了 匹配双字节字…...

wordpress 多语言版本/推广运营怎么做

1、 1、 在加载控件的地方插入一个PlaceHolder:加载代码: WEbControl wc new WebControl(HtmlTextWriterTag.Textarea); PlaceHolder1.Controls.Add(wc); 这样就可以在PlaceHolder处插入一个Textarea 2、自定义显示用户控件 在从一个Web页面…...