亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? dhcp.c

?? 本程序是一個RS232轉網口的。是一個透明傳輸的模塊
?? C
?? 第 1 頁 / 共 2 頁
字號:
/*
*****************************************************************************************************
*
*  File name: dhcp.c
*****************************************************************************************************
*/
#include "..\head\includes.h"


void DHCP_Pack(unsigned char PACK_TYPE) ;
/*
*****************************************************************************************************
*FUNC: DHCP解析
*NOTE: 
*****************************************************************************************************
*/
//******* DHCP 的6種狀態 *******
#define DHCP_INIT     0
#define DHCP_SELECT   1
#define DHCP_REQUEST  2
#define DHCP_BOUND    3
#define DHCP_RENEW    4
#define DHCP_REBIND   5


//******* DHCP 的幾種報文類型狀態 *******
#define OP_DHCPDISCOVER  1
#define OP_DHCPOFFER     2
#define OP_DHCPREQUEST   3
#define OP_DHCPDELINE    4
#define OP_DHCPACK       5
#define OP_DHCPNACK      6
#define OP_DHCPRELEASE   7
#define OP_DHCPINFORM    8

 

_DHCP_REG_ xdata DHCPReg;
bit bBound = FALSE;

/*
*****************************************************************************************************
*FUNC: 綁定與釋放回調函數
*NOTE: 
*****************************************************************************************************
*/
void On_Bound(void) reentrant
{
    //申請到的IP可寫入FLASH,下次開機時優先申請該IP.可選做
    DHCPReg.timer100.dwords = 60;                              //2分鐘 FOR DEBUG 
	if ((DHCPReg.timer100.dwords == 0) || (DHCPReg.timer100.dwords > 7200)){
        DHCPReg.timer100.dwords = 7200;                        //如果DHCP沒指配時間或大于2小時,默認為2小時
	}
    my_ip_address.dwords      = DHCPReg.myip.dwords;           //使用分配得到的IP
    gateway_ip_address.dwords = DHCPReg.gatewayip.dwords;      //使用分配得到的網關IP
	mask_ip_address.dwords    = DHCPReg.maskip.dwords;         //使用分配得到的子網掩碼
	if (gateway_ip_address.dwords == 0) {                      //網關IP=0
        if (DHCPReg.severip.dwords != 0) {                     //DHCP服務器IP不等于0
            gateway_ip_address.dwords = DHCPReg.severip.dwords;//把DHCP服務器IP當作網關IP
		}
	}

	DHCPReg.timer50.dwords  = (DHCPReg.timer100.dwords) / 2;        //50%定時器
	DHCPReg.timer87.dwords  = DHCPReg.timer100.dwords * 875 /1000;  //87.5%定時器
	bBound = TRUE;
}


void On_Release(void)reentrant
{
    DHCP_Pack(OP_DHCPRELEASE);
    bBound = FALSE;
	DHCPReg.state = DHCP_INIT;

	if (bConnect) {                                     //如果已連上,關閉鏈路 
        tcp_send(&TCPSend,FLG_RST, 20, IndexOfClient);  //這里一定要加RST
	    InerClose(IndexOfClient);                       //關閉該套接字,重連 
	}
}

/*
*****************************************************************************************************
*FUNC:  DHCP 初始化
*NOTE: 
*****************************************************************************************************
*/
void DHCPValueInit(void)
{
    bBound = FALSE;
    DHCPReg.state = DHCP_INIT;
    DHCPReg.myip.dwords      = 0;   
	DHCPReg.gatewayip.dwords = 0;
    DHCPReg.maskip.dwords    = 0;   
	DHCPReg.dns_m.dwords     = 0;
	DHCPReg.dns_s.dwords     = 0;
	DHCPReg.severip.dwords   = 0;
	DHCPReg.timer100.dwords  = 0;
	DHCPReg.timer50.dwords   = 0;
	DHCPReg.timer87.dwords   = 0;
}
void DHCPInit(void) 
{
    DHCPValueInit();
    DHCPReg.on_bound   = (void*)On_Bound;
	DHCPReg.on_release = (void*)On_Release;
}


/*
*****************************************************************************************************
*FUNC: 打包 DHCP Discover
*NOTE: 1: DHCP 是基于UDP協議的
       2: 果沒回應隔9,13,16秒后再發,如果還是沒響應,隔5分鐘分鐘再發起DISCOVER
	   3: UDP CRC包括UDP頭及UDP數據 長度len

	   全部廣播在家里路由器試可以續租可以得到響應
		   //my_ip_address.dwords = 0;//自己的IP還是未知發0.0.0.0
		   //DHCP_Pack_Send(pTxdnet, dest_ip, UDP_TYPE, len);
*****************************************************************************************************
*/
void DHCP_Pack(unsigned char PACK_TYPE) 
{
	unsigned int len,i;
    unsigned char model_id_len=0,j;
	union netcard xdata *pTxdnet;
	union IP_address xdata dest_ip;
	union IP_address xdata source_ip;

	pTxdnet = &UDPSend;
      
    source_ip.dwords = 0;                                       //源IP未知,發送0.0.0.0
	dest_ip.dwords = 0xffffffff;                                //目的IP未知,采用廣播 
                                           
	pTxdnet->udpframe.sourceport = 68;	                        //DHCP源端口為68
	pTxdnet->udpframe.destport   = 67;                          //DHCP目的端口為67
   	//pTxdnet->udpframe.length = len;		                    //長度未定	
   	pTxdnet->udpframe.crc = 0;                                  //UDP頭部8字節

	
	pTxdnet->ipframe.sourceip[0] = source_ip.words[0];           //參于計算檢驗和,不算在UDP長度里
	pTxdnet->ipframe.sourceip[1] = source_ip.words[1];           //源IP未知,發送0.0.0.0 
	pTxdnet->ipframe.destip[0]   = dest_ip.words[0];
	pTxdnet->ipframe.destip[1]   = dest_ip.words[1];             // ffffffff

    pTxdnet->dhcpframe.op              = 1;                      //DHCP 請求
	pTxdnet->dhcpframe.hardwaretype    = 1;                      //以太網
    pTxdnet->dhcpframe.hardwarelen     = 6;
	pTxdnet->dhcpframe.hops            = 0;                      //跳數置0
    pTxdnet->dhcpframe.transactionid   = DHCPReg.transactionid;  //類似SEQ
	pTxdnet->dhcpframe.seconds         = 500;                    //?
	pTxdnet->dhcpframe.flags           = 0x8000;                 //最高位為1:廣播請求,0:單播 抓包=0

	for (i=0; i<4; i++) {
	    if ((PACK_TYPE == OP_DHCPREQUEST) && bBound){            //續租的時候這里要填之前申請到的本地IP
            pTxdnet->dhcpframe.clientip[i] = DHCPReg.myip.bytes[i];
		} else {
            pTxdnet->dhcpframe.clientip[i] = 0;                  //參照抓包也是=0
		}
        pTxdnet->dhcpframe.yourip[i]      = 0;                   //DHCP服務器分配給客戶端的 
        pTxdnet->dhcpframe.severip[i]     = 0;                   //如果須要轉發才填 
        pTxdnet->dhcpframe.gatewayip[i]   = 0;                   //如果須要轉發才填 
	}

	for (i=0; i<16; i++) {                                       //16字節前6字節填客戶硬件地址,余補0
	    if (i < 6) {
            pTxdnet->dhcpframe.clientmac[i] = my_ethernet_address.bytes[i];
		} else {
            pTxdnet->dhcpframe.clientmac[i] = 0;
		}
	}
    for (i=0; i<64; i++) {                           //服務器主機名Server之名稱字串,以0x00結尾
        pTxdnet->dhcpframe.severhostname[i] = 0;
    }
    for (i=0; i<128; i++) {                          //啟動文件名若client需要透過網路開機
        pTxdnet->dhcpframe.bootfilename[i] = 0;
	}

	pTxdnet->dhcpframe.magic[0]=0x63;                //抓包這里有四字節內容如右:(OK)
	pTxdnet->dhcpframe.magic[1]=0x82;
	pTxdnet->dhcpframe.magic[2]=0x53;
	pTxdnet->dhcpframe.magic[3]=0x63;
	//len = 8+28+16+64+128+4;
	len = 248;                                       //長度很重要

	//---------- 以下為OPTIONS  --------------------
	i=0;                                             //長度可變

	//-----  包類型 -----------
    pTxdnet->dhcpframe.options[i++]=53;              //選項代碼   
	pTxdnet->dhcpframe.options[i++]=1;               //選項長度
	pTxdnet->dhcpframe.options[i++]=PACK_TYPE;       //DHCP包類型

	//----- 請求自動分配 ------ 
    if (PACK_TYPE == OP_DHCPDISCOVER) {              //發現包時請求自動分配
        pTxdnet->dhcpframe.options[i++]=0x74;
	    pTxdnet->dhcpframe.options[i++]=1;
	    pTxdnet->dhcpframe.options[i++]=1; 
    }
	 
    //----- 請求使用該本地IP ------                                            
	if ((PACK_TYPE == OP_DHCPREQUEST) && (bBound==FALSE)){  //DHCP offer后有分配給一個本地IP
	    pTxdnet->dhcpframe.options[i++]=50;                 //請求本地IP填在選項里
	    pTxdnet->dhcpframe.options[i++]=4;
	    pTxdnet->dhcpframe.options[i++]=DHCPReg.myip.bytes[0];
		pTxdnet->dhcpframe.options[i++]=DHCPReg.myip.bytes[1];
		pTxdnet->dhcpframe.options[i++]=DHCPReg.myip.bytes[2];
		pTxdnet->dhcpframe.options[i++]=DHCPReg.myip.bytes[3];

        //DHCP SEVER IP填在選項里
	    pTxdnet->dhcpframe.options[i++]=54;          
	    pTxdnet->dhcpframe.options[i++]=4;
	    pTxdnet->dhcpframe.options[i++]=DHCPReg.severip.bytes[0];
		pTxdnet->dhcpframe.options[i++]=DHCPReg.severip.bytes[1];
		pTxdnet->dhcpframe.options[i++]=DHCPReg.severip.bytes[2];
		pTxdnet->dhcpframe.options[i++]=DHCPReg.severip.bytes[3];
    }

    //----- 主動釋放時如果有本地IP,選填 ------ 
	if ((PACK_TYPE == OP_DHCPRELEASE) && (bBound == TRUE)) {
	    pTxdnet->dhcpframe.options[i++]=50;                 //請求本地IP填在選項里
	    pTxdnet->dhcpframe.options[i++]=4;
	    pTxdnet->dhcpframe.options[i++]=DHCPReg.myip.bytes[0];
		pTxdnet->dhcpframe.options[i++]=DHCPReg.myip.bytes[1];
		pTxdnet->dhcpframe.options[i++]=DHCPReg.myip.bytes[2];
		pTxdnet->dhcpframe.options[i++]=DHCPReg.myip.bytes[3];
	}
   

	//----- host name(用ID代替) ------
	model_id_len = strlen(ModelIdBak);

    pTxdnet->dhcpframe.options[i++] = 12;
	pTxdnet->dhcpframe.options[i++] = model_id_len;
	for (j=0; j<model_id_len; j++) {                     //ID的字符串
        pTxdnet->dhcpframe.options[i++] = ModelIdBak[j];
	}

	if (PACK_TYPE == OP_DHCPREQUEST) {
	    pTxdnet->dhcpframe.options[i++]=81;          
	    pTxdnet->dhcpframe.options[i++]=4+model_id_len;
	    pTxdnet->dhcpframe.options[i++]=0;
		pTxdnet->dhcpframe.options[i++]=0;
		pTxdnet->dhcpframe.options[i++]=0;
	    for (j=0; j<model_id_len; j++) {                  //ID的字符串
            pTxdnet->dhcpframe.options[i++] = ModelIdBak[j];
	    }
		pTxdnet->dhcpframe.options[i++]=0x2e;
	}

	//----- vendor class ------ 
    pTxdnet->dhcpframe.options[i++]=60;
	pTxdnet->dhcpframe.options[i++]=8;
	pTxdnet->dhcpframe.options[i++]=0x4d; 
    pTxdnet->dhcpframe.options[i++]=0x53; 
    pTxdnet->dhcpframe.options[i++]=0x46; 
    pTxdnet->dhcpframe.options[i++]=0x54; 
    pTxdnet->dhcpframe.options[i++]=0x20; 
	pTxdnet->dhcpframe.options[i++]=0x35; 
	pTxdnet->dhcpframe.options[i++]=0x2e; 
	pTxdnet->dhcpframe.options[i++]=0x30;

	pTxdnet->dhcpframe.options[i++]=255;             //DHCP包結束

	len+=i;                                          //+選項長度很重要   
	pTxdnet->udpframe.length = len;                  //UDP長度頭+數據

	createudpcrc(pTxdnet,len);                       //CRC包括UDP頭及UDP數據
	

//===================以上打包===============================
	//構建以太網包
	pTxdnet->etherframe.protocal=0x0800;
	pTxdnet->etherframe.uSourceID[0]=my_ethernet_address.words[0];  //網卡地址
	pTxdnet->etherframe.uSourceID[1]=my_ethernet_address.words[1];
	pTxdnet->etherframe.uSourceID[2]=my_ethernet_address.words[2];
	pTxdnet->ipframe.verandihl=0x45;                                
	pTxdnet->ipframe.typeofserver=0x00;
	pTxdnet->ipframe.totallength=20+len;
    pTxdnet->ipframe.ttl=0x80;
	pTxdnet->ipframe.frameindex=frameindex;
	frameindex++;
	pTxdnet->ipframe.segment=0x0000;
	pTxdnet->ipframe.protocal=UDP_TYPE;                           //基于UDP協議
    pTxdnet->ipframe.crc=0;

    pTxdnet->ipframe.destip[0]=dest_ip.words[0];                  //填全1
    pTxdnet->ipframe.destip[1]=dest_ip.words[1];
    pTxdnet->ipframe.sourceip[0]=source_ip.words[0];              //填全0
    pTxdnet->ipframe.sourceip[1]=source_ip.words[1];

    pTxdnet->ipframe.crc=createipheadcrc(pTxdnet);

	pTxdnet->etherframe.uDestID[0]=0xffff;                        //填寫目的MAC,采用廣播
	pTxdnet->etherframe.uDestID[1]=0xffff;
	pTxdnet->etherframe.uDestID[2]=0xffff;

	send_packet(pTxdnet,34+len);

}

/*
*****************************************************************************************************
*FUNC:  如果一直沒分配到IP,2s 請求一次
*NOTE: 
      1:封裝發送廣播一個DHCPDISCOVER(DHCP發現)包,目的端口填67,        
      2:進入SELECT狀態
*****************************************************************************************************

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产曰批免费观看久久久| 99综合影院在线| 成人高清伦理免费影院在线观看| 91精品福利视频| 久久亚洲影视婷婷| 亚洲一区二区欧美日韩| av在线不卡电影| 亚洲精品在线一区二区| 亚洲与欧洲av电影| 成人av电影免费在线播放| 欧美va亚洲va在线观看蝴蝶网| 中文字幕一区二区三区精华液| 蜜桃视频在线观看一区二区| 欧美在线观看一二区| 国产精品嫩草久久久久| 国产在线看一区| 日韩免费一区二区三区在线播放| 亚洲午夜电影在线| 色综合久久久久综合体桃花网| 国产视频亚洲色图| 国产盗摄视频一区二区三区| 欧美xxxxxxxxx| 蜜臀久久99精品久久久久久9| 欧美群妇大交群的观看方式| 亚洲在线观看免费视频| 欧美亚洲高清一区| 亚洲在线中文字幕| 欧美日韩一区三区四区| 亚洲第一狼人社区| 欧美日韩国产综合久久| 午夜精品久久久久久久99樱桃| 精品视频1区2区3区| 亚洲一区二区三区在线播放| 91高清视频在线| 亚洲高清免费观看高清完整版在线观看| 99热99精品| 一区二区三区蜜桃| 欧美少妇bbb| 免费在线观看一区二区三区| 日韩三级视频中文字幕| 国内精品久久久久影院色| 久久久久亚洲综合| 丰满放荡岳乱妇91ww| 亚洲欧洲日韩在线| 欧美色区777第一页| 日韩精品色哟哟| 精品动漫一区二区三区在线观看| 国产黄色91视频| 亚洲欧洲三级电影| 欧美精品1区2区| 麻豆91在线播放免费| 国产网站一区二区| 91麻豆.com| 日本人妖一区二区| 中文字幕精品一区二区三区精品 | 欧美一级免费大片| 国产一区视频导航| 亚洲免费观看高清完整版在线观看熊| 欧美精品色综合| 激情综合色丁香一区二区| 中文字幕亚洲区| 制服丝袜日韩国产| 成人白浆超碰人人人人| 亚洲成人手机在线| 国产天堂亚洲国产碰碰| 欧美特级限制片免费在线观看| 免费欧美日韩国产三级电影| 国产精品午夜久久| 欧美精品少妇一区二区三区| 丁香婷婷综合网| 偷偷要91色婷婷| 国产精品久久毛片| 91精品欧美福利在线观看| 成人性视频网站| 首页欧美精品中文字幕| 国产精品黄色在线观看| 欧美一区二区精品久久911| k8久久久一区二区三区| 日本不卡一区二区三区| 亚洲日本va午夜在线影院| 日韩欧美成人激情| 欧美中文字幕一区二区三区亚洲| 韩国视频一区二区| 天涯成人国产亚洲精品一区av| 国产精品毛片a∨一区二区三区| 欧美一区二区三区小说| 在线免费观看不卡av| 成人黄色电影在线| 国精品**一区二区三区在线蜜桃| 亚洲国产成人91porn| 国产欧美一区二区精品性| 欧美一区二区三区日韩| 欧美视频在线观看一区二区| 不卡的看片网站| 国产福利精品导航| 久久99精品国产麻豆婷婷| 午夜电影久久久| 亚洲一区二区三区小说| 亚洲三级免费电影| 欧美高清在线一区| 国产日韩欧美高清| 国产亚洲欧美日韩在线一区| 日韩免费电影一区| 欧美大片在线观看| 日韩精品一区二区三区三区免费| 欧美精品自拍偷拍动漫精品| 欧美视频中文一区二区三区在线观看| 91免费在线播放| 91蝌蚪porny九色| 97se亚洲国产综合自在线不卡| 国产成a人亚洲| 东方欧美亚洲色图在线| 国产成人丝袜美腿| 成人午夜免费视频| 成人aa视频在线观看| 成人avav影音| 日本高清不卡aⅴ免费网站| 91日韩一区二区三区| 精品视频一区二区三区免费| 欧美蜜桃一区二区三区| 91精品国产综合久久久蜜臀图片 | 久久99日本精品| 久久精品国产77777蜜臀| 极品瑜伽女神91| 国产高清久久久| 91在线无精精品入口| 欧洲一区在线电影| 91精品国产欧美一区二区18 | 9191久久久久久久久久久| 91麻豆精品国产91久久久使用方法 | 欧美在线观看你懂的| 欧美性生活久久| 日韩一级成人av| 国产午夜久久久久| 国产精品久久看| 午夜精品123| 国产东北露脸精品视频| 色94色欧美sute亚洲13| 91精品国产综合久久久久久| 久久亚洲精品小早川怜子| 国产精品国产自产拍高清av| 一区二区三区在线视频免费观看| 午夜精品免费在线观看| 国产精品99久久久久久似苏梦涵| 99久久久久久| 日韩免费视频线观看| 中文字幕日韩一区| 免费看黄色91| 99精品视频在线观看| 欧美顶级少妇做爰| 国产精品欧美一区喷水| 视频一区视频二区在线观看| 国产麻豆精品在线| 欧美四级电影在线观看| 国产欧美精品一区aⅴ影院| 亚洲高清在线精品| av午夜精品一区二区三区| 欧美一区中文字幕| 亚洲三级电影全部在线观看高清| 久久福利资源站| 91国产成人在线| 国产精品久久久久一区二区三区共| 亚洲sss视频在线视频| 成人免费看视频| 欧美大白屁股肥臀xxxxxx| 亚洲色图视频网| 国产精品一区二区三区乱码| 欧美久久久一区| ●精品国产综合乱码久久久久| 久久av资源网| 51精品秘密在线观看| 亚洲色图20p| gogo大胆日本视频一区| 精品三级在线看| 日韩av电影天堂| 欧美丝袜自拍制服另类| 中文字幕精品一区二区三区精品| 九九视频精品免费| 91精品国产色综合久久ai换脸 | 91丨porny丨国产| 久久九九全国免费| 久久99热这里只有精品| 7777精品伊人久久久大香线蕉| 亚洲欧美激情插| www.久久精品| 亚洲天堂成人网| 成人av中文字幕| 中文字幕欧美日韩一区| 国产一区视频导航| 久久夜色精品国产欧美乱极品| 蜜桃视频在线一区| 日韩亚洲欧美一区| 免费观看成人鲁鲁鲁鲁鲁视频| 欧美日韩午夜精品| 亚洲sss视频在线视频| 欧美自拍丝袜亚洲| 日韩精品一区第一页| 69堂精品视频| 毛片av一区二区三区| 欧美大度的电影原声|