作者 | dog250    责编 | 张文

出品 | CSDN(ID:CSDNnews)

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 而登峰造极…

程序员如何避免陷入“内卷”、选择什么技术最有前景,中国开发者现状与技术趋势究竟是什么样?快来参与「2020 中国开发者大调查」,更有丰富奖品送不停!

☞程序员硬核“年终大扫除”,清理了数据库 70GB 空间☞一行代码没写,凭啥被尊为“第一位程序员”?
☞任正非就注册姚安娜商标道歉;人人影视字幕组因盗版被查;JIRA、Confluence 等产品本月停售本地化版本 | 极客头条

像玩乐高一样玩 simpletun相关推荐

  1. 像玩乐高一样玩simpletun

    netcat小巧而灵活,能应付各种你需要的网络测试. 但要明白netcat所能应对的网络场景基本都和端到端有关,比如和TCP,UDP有关. 网络还有另一面,即链路本身.如果你想模拟一个防火墙,模拟一个 ...

  2. 王者荣耀中有哪些获胜率高的玩法?

    PMCAFF(www.pmcaff.com):互联网产品社区,是百度,腾讯,阿里等产品经理的学习交流平台.定期出品深度产品观察,互联产品研究首选. 外包大师(www.waibaodashi.com): ...

  3. pip高阶玩法,让python模块安装飞起来

    在学习或者工作中,我们经常在搭建环境时需要下载安装一些库文件,但是pip默认下载使用的源是国外的,因此下载速度会很慢,所以在下载的时候我们可以将源地址换为国内的源,会大大提升下载速度. pip.ini ...

  4. 路由+ros+linux,ROS+openwrt(旁路由) IP分流稳定出国方案 ESXI高端玩法

    ROS+openwrt(旁路由) IP分流稳定出国方案 ESXI高端玩法 2020-03-18 08:39:45 21点赞 173收藏 73评论 原来一直都是单openwrt方案(应该是ks lede ...

  5. 天猫店群玩法解析,适合做天猫店群高利润玩法的类目有哪些?

    大家好,我是电商火火. 最近火火一直忙着天猫店群新玩法的事情, 关于天猫店群运营干货给大家分享的比较少了. 对于天猫店群高利润玩法,火火上一篇文章也只是浅谈下, 今天抽出空来给大家做一个天猫店群思路和 ...

  6. 计算机配置很高 但是很卡,为什么你的电脑配置很高但是玩起游戏来还是很卡?-电脑很卡怎么办...

    前言 本人在前几篇的简单的文章中,和大家讨论了一下英伟达控制面板的设置以及一些参数的简单介绍,分享了如何设置可能会使游戏更加流畅的一些方法.但是在评论区中我发现,很多朋友的电脑配置明明很好,达到了中高 ...

  7. 城里人的高端玩法(对股票及金融创新的本质的经典讲解)

    转自:许哲 http://zhuanlan.zhihu.com/wontfallinyourlap/20116480 (以下是个故事,纯虚构) Long long ago,有一座风景秀丽的小村庄,这里 ...

  8. 我应该和高姐玩原神还是应该自己玩国际象棋

    如果你和高姐都喜欢玩游戏,那么你们可以一起玩原神.如果你和高姐对国际象棋都感兴趣,那么你们也可以一起练习和比赛.最终的选择应该取决于你们个人的喜好和兴趣.另外,如果你想要学习一项新的技能或者发展自己的 ...

  9. 单靠MySQL进了字节,高端玩法才是王道!

    前两天看到字节一个老哥写的帖子,提到高阶开发者必须掌握的技能,其中他明确提出了"精通MySQL". 为啥MySQL对开发人员如此重要? 第一,不管你去面试哪家公司,数据库是必问项, ...

最新文章

  1. Apache Tomcat 7.x 概述
  2. 五分钟体验SpringBoot+Skywalking
  3. [HOW TO]-github/gitee的仓库统一管理
  4. FPS手游《战地先锋》性能案例精讲
  5. vim配置python代码提示,VIM配置成Python IDE
  6. Android ExpandableListView几个特殊的属性
  7. Jquery1.6版本后attr的变化
  8. python小游戏——21点
  9. linux实现自动互信,Linux 使用shell脚本实现自动SSH互信功能
  10. 形成20位存储单元的物理地址
  11. 移动开发学习记录点滴-动态增加列表行数据
  12. php会员可见内容代码,DedeCMS内容隐藏指定字段仅对会员显示对游客不可见的实现方法...
  13. android图片拖动放大_Android拖放
  14. inl和dnl matlab_AD的一些指标——INL与DNL
  15. speedoffice(Word)怎么添加页码
  16. 个人windows-manjaro双系统配置记录
  17. 汽车“核战争”:Arm明年量产下一代架构,“全面计算”战略背后的隐忧
  18. HTML笔记(课堂笔记整合)
  19. ubuntu18.04设置中文(简体)
  20. Windows怎么把系统用户中文文件夹改成英文

热门文章

  1. C++多态(一)——多态的定义、虚函数、静态绑定和动态绑定
  2. 【C++ Primer】第四章学习笔记 (复合类型)
  3. 敏捷开发团队管理系列之四:程序与测试团队III
  4. 发货通知单不允许新增,只能关联生成
  5. 永久修改VS include目录
  6. 笔记《JavaScript 权威指南》(第6版) 分条知识点概要1—词法结构
  7. (uC/OS-II学习笔记) 消息邮箱消息队列
  8. 关于如何解决特定场景下WPF4.0中“XamlWriter.Save序列化限制”问题的一种思路
  9. WIndows10下 MySQL 5.7(社区版)卸载
  10. [论文阅读] Scene Context-Aware Salient Object Detection