像玩乐高一样玩simpletun

netcat小巧而灵活,能应付各种你需要的网络测试。

但要明白netcat所能应对的网络场景基本都和端到端有关,比如和TCP,UDP有关。

网络还有另一面,即链路本身。如果你想模拟一个防火墙,模拟一个NAT怎么办?用netcat能做到吗?这个时候你可能就必须自己写内核模块了吧。

Netfilter?eBPF?NFV?这些都太复杂了!

可以在用户态完成的时候就尽量在用户态搞,简单稳定最重要。

我推荐simpletun。

simpletun并不是某个著名的开源软件,但是在网上一找可以找一大片,随便找一个杂耍即可。我说的simpletun模拟搭建网络设备的功能并不是说用它的二进制直接就能做到,而是说你可以随意对它进行三两行的那种魔改,让它实现你需要的功能。

搭建一个TCP隧道我这里就不说了,详见:
https://github.com/marywangran/simpletun/blob/main/simpletun.c

本文我要演示一个NAT功能。

正好我要调研一个NAT64的方案,我在思考如果没有现成方案的话能不能用tun设备搭建一个,当然了,肯定是有现成方案的,也就没有动用tun设备。但总想试试,看看到底有多简单,那就简单写了一个:
https://github.com/marywangran/simpletun/blob/main/tunnat.c

玩法很简单,README里都写了:
在这里插入图片描述
这里的关键就几行代码:

if (FD_ISSET(tap_fd, &rd_set)) {struct iphdr *iph;/* data from tun/tap: just read it and write it to the network */unsigned int addr1 = inet_addr(from_ip);unsigned int addr2 = inet_addr(to_ip);nread = cread(tap_fd, buffer, BUFSIZE);iph = (struct iphdr *)buffer;if (addr2 == iph->daddr) {iph->daddr = addr1;} else if (addr1 == iph->saddr) {iph->saddr = addr2;} else {continue;}iph->check = 0;iph->check = ip_checksum((unsigned short *)iph, 20);nwrite = cwrite(tap_fd, buffer, nread);
}

当然,如果你想实现一个完整可用的NAT,那肯定需要维护一些链表保存session之类,但POC不需要这些。

相对应的,如果你想用tun模拟一个NAT64,也并不困难:

  • 将需要被NAT64的流量路由到tun网卡。
  • 用你的程序将从tun字符设备读取的裸包IPv4头换成IPv6头。
  • 将换完的裸包作为buffer写回到tun字符设备。

额外在外部配合一些个配置即可,这些配置基本上用iproute2都可以完成。

simpletun的确很low,就像netcat和nginx相比也很low一样,问题是你需要拿它做什么。我之所以善于在很短的时间验证一个事情行还是不行,在于我不善于折腾复杂的东西。我一向的观点就是,如果我是一个画家,我希望拿起笔来作画,而不是去学那些复杂的工具。

到底很多领域的所谓牛人是在该领域真的很牛呢还是说作为活体说明书很牛呢?很多的优秀设计师因为不会CAD找不到工作,也有很多的菜鸟设计师因为精通CAD而登峰造极…


浙江温州皮鞋湿,下雨进水不会胖。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/24257.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LeGO-LOAM学习

前言 在学习了LOAM之后,了解到LeGO-LOAM(面向复杂情况的轻量级优化地面的雷达里程计),进行了一个学习整理。 Github:https://github.com/RobustFieldAutonomyLab/LeGO-LOAM 论文:https://github.com/Robu…

乐高大颗粒作品10:滑板车的搭建

温馨提示 如果你喜欢本文,请点击收藏、在看并分享到朋友圈,想要获得更多乐高大颗粒图纸,请点击蓝字关注“Scratch青少儿编程课堂”,不定期更新更多优质作品。 ⭐ 详细步骤图 -end- 乐高大颗粒作品9:水井的搭建 2021-01…

乐高打印机robotc

目录 一、实验原理 二、实验目的 三、实验内容 四、实验器材(设备、元器件) 五、实验步骤 六、实验数据及结果分析 七、实验结论 八、总结及心得体会 九、对本实验过程及方法、手段的改进建议 代码附录 温馨提示 一、实验原理 1.取模&#x…

乐高大颗粒作品6:打地鼠的搭建

温馨提示 如果你喜欢本文,请点击收藏、在看并分享到朋友圈,想要获得更多乐高大颗粒图纸,请点击蓝字关注“Scratch青少儿编程课堂”,不定期更新更多优质作品。 ⭐ 打地鼠第一种搭建方法(曲柄) 打地鼠第二种搭…

LEGO® Education BricQ 乐高教育发布BricQ趣动系列套装

乐高教育今日宣布其发布两款无需额外技术辅助,寓学于乐的动手实践式STEAM学习解决方案,LEGO Education BricQ趣动系列套装。此次发布的两款解决方案均以体育运动为主题,在物理科学学科教学中通过实际场景应用,帮助学生们以有趣且独…

如何搜索相似的图片,如何通过识别图像搜索图片

最近有一张图片,想搜索这张图片的来源,搜索图片里的内容也没有搜索出来。比如搜索一个明星的照片,输入名字可以出来很多,但是有了图片想知道这个图片更多的信息,或者类似的图片,怎么搜索呢。 百度提供了一个…

搜索引擎(包括图片搜索)

转自:http://blog.csdn.net/v_july_v/article/details/6827391 1、什么是搜索引擎 搜索引擎指自动从因特网搜集信息,经过一定整理以后,提供给用户进行查询的系统。因特网上的信息浩瀚万千,而且毫无秩序,所有的信息像汪…

安卓性能测试(三):耗电量 (batterystats)

使用条件: android 5.0及以上系统 (在6.0及以上系统的数据更详细) 使用方法: 1、打开电池数据获取 adb shell dumpsys batterystats --enable full-wake-history 2、数据重置 adb shell dumpsys batterystats --reset 3、拔掉…

BatteryStatsService电池电量统计服务源码分析

BatteryStatsService主要负责电池电量的统计信息,首先我们简单的看下电量统计服务的启动过程。 BatteryStatsService启动过程 从BatteryStatsService的启动时序图可以看出,BatteryStatsService服务是在ActivityManagerService服务中启动的 1. 在SystemSe…

android 4.4 batteryservice 电池电量显示分析

转载地址:http://blog.csdn.net/daweibalang717/article/details/40615453 最近工作接触到这么的东西,这是我对整个电池管理方面Java 层的分析。如果想了解底层的话,请看我的博客: android 4.4 电池电量管理底层分析(C\C层) &a…

Battery Historian分析手机耗电神器

极力推荐Android 开发大总结文章:欢迎收藏程序员Android 力荐 ,Android 开发者需要的必备技能 本篇文章主要介绍 Android 开发中 电量 的部分知识点,通过阅读本篇文章,您将收获以下内容: 1.安装Battery Historian 2.收集Batteryst…

卡尔曼滤波预测应用python实践

1. 什么是卡尔曼滤波 最佳线性滤波理论起源于二十世纪40年代美国科学家Wiener和前苏联科学家KOnMoropOB等人的研究工作,后人统称为维纳滤波理论。60年代Kalman把状态空间模型引入滤波理论,并导出了一套递推估计算法,后人称之为卡尔曼滤波理论…

BatteryStatsService电池电量统计服务分析

BatteryStatsService主要负责电池电量的统计信息,首先我们简单的看下电量统计服务的启动过程。 BatteryStatsService启动过程 从BatteryStatsService的启动时序图可以看出,BatteryStatsService服务是在ActivityManagerService服务中启动的 1. 在SystemServer中startBootstra…

使用Battery Historian采集android耗电数据

一、简介 Battery Historian是由Google提供的查看电量相关信息及事件的工具,Battery historian还可以上传bugreport文件,分析用户手机中App的电池耗电情况。详见:GitHub - google/battery-historian: Battery Historian is a tool to analyz…

利用XGBoost实现短期电力负荷预测

💥 项目专栏:【机器学习项目实战案例目录】项目详解 + 完整源码 文章目录 一、利用XGBoost实现短期电力负荷预测二、数据集介绍三、将数据进行标准化四、形成训练数据五、划分训练集、测试集六、定义模型七、模型训练八、训练集、测试集验证九、网络搜索十、绘制结果🌠 『…

性能优化十四之电量分析工具Battery Historian使用

上篇博客中并没有讲解BatterHistory该如何使用,这篇博客就开始给大家进行介绍。 数据准备 battery-historian工具需要使用bugreport中的BatteryHistory 1. 先断开adb服务,然后开启adb服务 adb kill-server 这一步很重要,因为当我们开…

使用BatteryHistorian分析和优化应用电量

欢迎Follow我的GitHub, 关注我的CSDN. 本文的合集已经编著成书,高级Android开发强化实战,欢迎各位读友的建议和指导。在京东即可购买:https://item.jd.com/12385680.html 在Android项目中, 较难监控应用的电量消耗, 但是用户却非常关心手机的…

Android 使用 Batterystats 和 Battery Historian 分析电池用量

Android 使用 Batterystats 和 Battery Historian 分析电池用量 专注于Android开发,分享经验总结,欢迎加入 Android开发中涉及到耗电量怎么分析呢 google官方提供了文档,链接:https://developer.android.com/studio/profile/batt…

GT的使用及耗电量统计的原理,对GT采集的电池数据采用VBA分析

注意:我测试时的ios操作系统是8.1,现在ios9.0及以后的耗电量比老的系统少了一个量级,官方说减少20%,我的手机在熄屏的耗电量减少了30%以上,亮屏幕减少不太多。 具体编译宏文件和GT采集的部分数据文件下载地址是&#…

Android电池功耗BatteryHistorian数据分析

BatteryHistorian的用法 BatteryHistorian环境搭建配置 官方文档 1.BatteryHistorian图形页面数据分析: Timeline: System stats: CPU runing: cpu运行的状态 Kernel only uptime: 只有kernell运行 Userspace wakelock: 用户空间申请的锁 Screen: 屏幕是否点亮 Top …