移植 lwip,在 windows 内核构建一个 TCPIP 协议栈

亲,当你点开看这篇文章,就说明你知道我想要干什么事情,或者说,你知道在 Windows 的内核种绕开它的网络协议,再独立构建一个网络协议栈的意义。如果你要问我有 windows 系统的网络协议栈不用,移植 lwip 有什么意义,那么你可以关闭链接走人了,因为这篇文章不适合你,它不是讲 lwip 移植原理的。

经常关注我的博客的朋友们可能还记得,大概十年前我写过一篇关于防火墙的文章,里面简单提到了在 Windows 内核构建 TCP/IP 协议栈绕过防火墙的概念的可行性。当时经过研究,确实是可行的。我将 lwip 移植到了Windows 内核,以内核驱动的形式在 NDIS 层构建了一个独立于 Windows 的网络协议栈。lwip(Lightweight TCP/IP stack) 是一套轻量级的 TCP/IP 协议栈,不过演化到今日,它已经不“轻”了,围绕 lwip 已经构建了一整套的以太网网络协议。当时是基于 Windows XP平台做的一个演示概念,使用 NDIS Hook,移植的 lwip 版本是 1.2 。因为 lwip 提供了一套与巴克利 socket 接口几乎 90% 兼容的 socket API,所以当时几乎不费吹灰之力就在内核中构建了一个 http 协议的客户端,使得驱动能够在内核中从指定的 URL 地址(写在注册表中)下载一个文件,如果是可执行文件,甚至还可以用 stackoverflow 上介绍的方法在内核中启动这个可执行文件。当时测试的主流防火墙软件,都感知不到这些网络访问,可以说成功地绕过了防火墙。

这个东西做完之后,这个演示原型已经烂在我的硬盘上十几年了,最近突然发现 lwip 已经更新到 2.1.2 版本了,支持了包括 IPV6 在内的更多协议。我看说明文件,在 contrib 部分甚至还有一个 http server 的完整实现,我的天啊,如果在内核构建一个能绕开所有防火墙的 http server,简直不敢想象。如果利用 lwip 提供的 socket API,将 3Proxy 也移植到内核中,我的天啊,更是不敢想啊。

那么到底行不行呢?不试试怎么知道?趁着最近有点时间,我决定搞一下。不过真的要搞起来,困难还是很多的,首先,从 Windows vista 开始,NDIS 已经升级到了 6.x 版本,基于 5.x 的体系已经过时了,同时 64 位的 PG 不允许 Hook NDIS层,这些都是需要修改的地方。不过好在 MS 还是为防火墙软件的开发人员留了条口子,那就是 NDIS Filter。不用 Hook,只用合法的 NDIS Filter 能否实现这个功能呢?我心里还是没底的。另外,lwip 2.x 版本的体系结构和 1.2 的差异还是很大的,这个移植的工作量有多大心里也没底。

整理了一下,大概要做以下几件事情:

  • 以 DDK 中的 NDIS Filter 实例代码为基础,删除不需要的内容,构建一个空的 NDIS Filter 框架。
  • 将 lwip 1.3.2 移植到内核。为什么不选择最新的 2.1.2 版本?因为看起来移植的工作量比较大,1.3.2 的代码结构与 1.2 的差异比较小,并且已经开始支持 IPV6 ,基本上我们需要的功能都有了,为了减少移植的工作量和难度,我选择 1.3.2 版本。根据 1.2 的移植经验,这个移植应该不难。这部分移植的主要工作是将 lwip 的收发帧接口适配到 NDIS 的体系中,同时处理好定时器线程的处理,内核线程毕竟比用户态线程有更多的约束。还有,当系统中有多个网卡的时候,以及一块网卡有多个 IP 接口的时候,也是需要 lwip 做一些适配修改的。
  • 将 lwip 演示程序中的 http server 移植到内核,通过对 137 端口的复用,尝试开启一个内核中的 http server。这个东西如果成功了,应该能够通过浏览器访问:http://127.0.0.1:137 ,并看到演示的页面。
  • 最后,终极目标是尝试将 3Proxy 移植到内核,配合 lwip 实现一个代理服务器的功能。这个如果成功了,就可以在内核神不知鬼不觉地开启一个代理服务,3Proxy 可是支持多种代理协议的啊。这一步的工作难度还是比较大的,毕竟 lwip 的socket API接口与真的巴克利 socket 接口还是不一样的,我考虑做一个适配层,但是如果 3Proxy 用了太多 lwip 不支持的功能,那么这个适配层就比较难做,有可能导致移植失败。

根据我掌握的知识,前三步还是比较容易做到的,关键是看我有没有时间,要知道,我的懒惰症还是很严重的。上次是因为要测试一下防火墙,所以有了点动力,这次难道还测防火墙?不管怎么样,先从 NDIS Filter 开始吧。

我有一个 lwip

面朝内核,支持Proxy

从今天起,关心 NDIS Filter 和 3Proxy

移植 lwip,在 windows 内核构建一个 TCPIP 协议栈相关推荐

  1. 构建一个自定义CentOS7内核

    Table of Contents 1.建立准备 2.配置内核 3.内核ABI 4.修改内核规范文件 5.构建新内核 6.安装新内核 相关文章 由RalphAngenendt创建.目前由AlanBar ...

  2. 在CLion中构建Windows内核WDM驱动

    在CLion中构建Windows内核WDM驱动 1.安装好CLion,VS2019,WDK 过程略 2.下载FindWDK.cmake 该文件来自于github/SergiusTheBest # Re ...

  3. 发现一个不错的Windows内核的相关论坛

    虽然不是全将Windows内核的,不过Windows内核方面的板块还是比较多的,大家可以去看看http://bbs.driverdevelop.com/index.php 转载于:https://ww ...

  4. java的linux内核构建,构建一个Docker 的Java编译环境

    用Dockerfile 构建一个Java的编译环境 1.包括以下软件包 Ubuntu jdk maven svn 2.jdk.maven 需要手动下载,下载之后分别为 jdk-8u51-linux-x ...

  5. kernel移植——从三星官方内核开始移植

    以下内容源于朱有鹏嵌入式课程的学习,如有侵权,请告知删除. 一.内核移植初体验 1.三星官方移植版内核获取 源码包来于三星的SMDKV210开发板附带的光盘资料,下载地址. 2.构建移植环境 (1)W ...

  6. ARM硬件平台上基于UCOS移植Lwip网络协议栈

    目录 1.硬件平台 1.1硬件平台简介 为保证网络协议栈的顺利移植,选用了LPC2220作为主控芯片,RTL8019AS作为网卡芯片,使用HR901170A进行电平转换.滤波. LPC2220是Phi ...

  7. 《17.内核的移植1-从三星官方内核开始移植》

    转自 https://edu.csdn.net/lecturer/505 朱老师物联网大讲堂 <17.内核的移植1-从三星官方内核开始移植> 第一部分.章节目录 2.17.1.内核移植初体 ...

  8. 2.17.内核的移植1-从三星官方内核开始移植

    请移步到这里: http://note.youdao.com/noteshare?id=f857b3250ceaf78d81f68a4284093a66&sub=62409316D643480 ...

  9. Windows内核新手上路2——挂钩shadow SSDT

    Windows内核新手上路2--挂钩shadow SSDT 文章核心内容:安全软件窗口保护.安全输入.截屏保护的一些思路.挂钩NtUserFindWindowEx.NtUserGetForegroun ...

最新文章

  1. 最初学习ASP.net的时候常会遇到的问题
  2. Ubuntu Android Studio/IntelliJ IDEA 支持文件中文命名
  3. P4336 [SHOI2016]黑暗前的幻想乡
  4. mpvue v-html 代替方法 使用 mpvue-wxparse
  5. C语言向文件写入内容并读取显示
  6. 关于gcc -o 的使用问题
  7. php导航栏代码子菜单找不到,php – 下拉导航菜单,显示每个类别的最新帖子
  8. 设计模式——组合模式
  9. 激活mircrosoft office2013
  10. Redis Stream
  11. 颜色迁移之四——模糊聚类(FCM)算法
  12. tpwr886n路由器设置虚拟服务器,tl-wr886n路由器设置步骤图解 | 192路由网
  13. winXPSP3的盘怎么装在VISTA系统里
  14. CAD文件翻译和本地化
  15. 英语不好的同学已经期盼已久了!IDEA、Clion、Pycharm等2020版本支持中文啦,汉化教程
  16. 《jdk8u源码分析》6.1.GetJREPath
  17. 动画特效五:灌水动画
  18. 有没有手机版_华为 | 官方表态,折叠屏5G手机即将开售!
  19. 如何评价掘金量化的质量?
  20. java调用libreoffice_JAVA实现LibreOffice转换PDF文档

热门文章

  1. Qt编译通过,运行时出现the process was ended forcefully的crashed问题
  2. PHP连接MySQL数据常用的函数_PHP操作Mysql常用函数
  3. 网络基础——IP地址子网掩码MAC地址DNS(详解)
  4. 35岁被称为中年男人,失业之后可以做些什么
  5. 点云数据处理合集(三)软件、开源库、数据库
  6. Echosync 一款优秀的文件夹同步和备份软件
  7. 3.MySQL数据类型
  8. apqp过程流程图范本_经典APQP流程图
  9. pmp 2021年6月20日考试原题分享
  10. 来,让我们认识一哈工程高等代数