ICode9

精准搜索请尝试: 精确搜索
首页 > 系统相关> 文章详细

lwip在windows运行环境搭建

2020-02-25 16:03:18  阅读:422  来源: 互联网

标签:LwIP windows 网卡 内核 lwip pcap 搭建


目录

一、前言

二、lwip在windows运行的架构

三、环境搭建

四、lwip在windows上的移植


一、前言

文章内容为学习 老衲五老老师的《LwIP Web服务器设计》培训课程中的 环境搭建 章节的学习总结,课程内容包含有每讲的视频录制和程序源码,如想获取可以购买原教程。

二、lwip在windows运行的架构

在LWIP与底层操作系统之间还有一个模拟层sys_arch.c,所以底层操作系统不同时,值需要修改操作系统模拟层即可。

三、环境搭建

1、安装VS2010 破解方法:https://wenku.baidu.com/view/0da247c2aa00b52acfc7ca76.html?re=view

VS工程介绍:https://blog.csdn.net/luoweifu/article/details/48692267

2、安装Winpcap,允许开机自启动

3、安装Wireshark

4、解压工程包

5、配置环境变量,这里配置PCAP_DIR环境变量的目的是为了Lwip_Test工程能找到Wpcap的库

 

6、打开工程目录为win-lwip\contrib\ports\win32\msvc\lwIP_Test.sln

 

7、工程代码参数配置,GUID在wireshark中可以查看,IP地址需要跟本机IP在同一个网段,而不是用本机的IP地址。

对于IP地址和MAC 地址设置(看视频)有一个重点,通常情况下我们是使用第二种配置,这样在一台电脑上就可以完成调试。

如果LwIP 使用的网卡地址设置得和我们主机的网卡地址一样,那么LwIP 可以访问外部主机,外部主机也可以访问LwIP,但是本地主机不能访问LwIP,这个是winpcap 的一个限制。

如果LwIP 使用的网卡地址设置得和我们主机的网卡地址不同,那么LwIP 不能访问外部主机,外部主机也不能访问LwIP,但是本地主机可以访问LwIP。

所有应用的开关在lwipcfg_msvc.h 文件中,要测试什么应用,直接把对应的宏定为1 就可以了:

 

 

四、lwip在windows上的移植

1、移植关键 --- Winpcap抓包

正常Windows上的TCPIP通讯是左边Application <---> TCPIP <----> 内核。但要在windows上移植使用lwip就不能再使用windows原始的TCPIP协议栈。要借助windows上的抓包原理来实现lwip的移植和使用,那比如在windows上使用wireshark抓包的时候其实依赖的是Winpcap(图圈出来部分),应用程序在从内核接收数据包或应用发送数据包的时候,其实是会拷贝一份调用Winpcap的API进行解析,实现抓包的功能,不会影响左边正常数据包的发送跟接收。

同样借助于Winpcap,将lwip放置在用户态,调用Winpcap的API来实现与windows内核网卡之间数据包的交互,lwip和wpcap.dll动态库作为windows上的一个进程

 

 

2、移植内容:三个头文件,三个网卡函数,一个任务,模拟层移植

  • 头文件移植:cc.h  /  perf.h / lwipopts.h
  •  网卡驱动

1)pbuf结构,POOL类型,RAM类型

2)libpcap函数,lwip数据包发送接收与Wincap的对接,用Wincap的API函数来实现lwip中的三个网卡函数

pcap_t * pcap_open_live(const char * device, int snaplen, int promisc, int to_ms, char * errbuf)
int pcap_dispatch(pcap_t * p, int cnt, pcap_handler callback, u_char * user)
u_char* pcap_next(pcap_t *, struct pcap_pkthdr *);
int  pcap_sendpacket(pcap_t *, const u_char *, int);

void low_level_init(struct netif *netif)
err_t low_level_output(struct netif *netif, struct pbuf *p)
struct pbuf *low_level_input(struct netif *netif)
  • 一个任务

1)内核初始化,tcpip_init内核初始化,创建内核处理线程

2)添加网卡管理结构,netif_add 添加一个网卡到内核,由内核管理

3)数据包处理与内核超时处理,内核线程tcpip_thread,负责处理邮箱中的数据包

hurryddd 发布了35 篇原创文章 · 获赞 22 · 访问量 1116 私信 关注

标签:LwIP,windows,网卡,内核,lwip,pcap,搭建
来源: https://blog.csdn.net/m0_37845735/article/details/104498178

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有