ビルドへのWindowsの操作環境でのlwIP

ディレクトリ

I.はじめに

二、ウィンドウで実行されているのlwIPアーキテクチャ

第三に、ビルド環境

四、窓の移植でのlwIP


I.はじめに

ビルドの概要の章にLaona 5学習環境における「LWIPのWebサーバ設計」トレーニングコースを古い教師を学習記事の内容は、各圏のコースの内容は、ビデオ録画やプログラムのソースコードが含まれ、元のチュートリアルを取得したいと購入することができます。

二、ウィンドウで実行されているのlwIPアーキテクチャ

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、configureは、コンフィギュレーション・PCAP_DIRの目的は、ここでWpcapライブラリプロジェクトを見つけることができますLwip_Test環境変数に環境変数であります

 

6、プロジェクトディレクトリを開くことは勝つ - のlwIPを\のcontrib \ポートです\ win32の\ MSVC \ lwIP_Test.sln

 

図7に示すように、プロジェクトコードのパラメータ設定は、GUIDは、Wiresharkの中に見ることができ、同一のIPネットワークセグメントではなく、マシンのローカルIPアドレスでIPアドレスが必要です。

IPアドレスとMACアドレスの設定(ビデオを参照)のためにフォーカスがあり、通常我々は、1台のコンピュータが試運転完了できるように、第2の構成を使用します。

あなたはLWIPが同じ私たちのホストおよびネットワークカードのアドレスを設定し、イーサネットアドレスを使用する場合は、LWIPは、外部ホストにアクセスすることができ、外部ホストがLWIPにアクセスできますが、ローカルホストLWIPにアクセスすることはできません、これはWinPcapのの制限です。

NICアドレスが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,负责处理邮箱中的数据包

发布了35 篇原创文章 · 获赞 22 · 访问量 1112

おすすめ

転載: blog.csdn.net/m0_37845735/article/details/104498178