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

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

?? clientpacket.c

?? udhcpc code for busybox
?? C
字號:
/* clientpacket.c * * Packet generation and dispatching functions for the DHCP client. * * Russ Dill <Russ.Dill@asu.edu> July 2001 * * Licensed under GPLv2 or later, see file LICENSE in this tarball for details. */#include <string.h>#include <sys/socket.h>#include <features.h>#if (__GLIBC__ >= 2 && __GLIBC_MINOR >= 1) || defined _NEWLIB_VERSION#include <netpacket/packet.h>#include <net/ethernet.h>#else#include <asm/types.h>#include <linux/if_packet.h>#include <linux/if_ether.h>#endif#include <stdlib.h>#include <time.h>#include <unistd.h>#include <netinet/in.h>#include <arpa/inet.h>#include <fcntl.h>#include "dhcpd.h"#include "clientpacket.h"#include "options.h"#include "dhcpc.h"#include "common.h"/* Create a random xid */unsigned long random_xid(void){	static int initialized;	if (!initialized) {		int fd;		unsigned long seed;		fd = open("/dev/urandom", 0);		if (fd < 0 || read(fd, &seed, sizeof(seed)) < 0) {			LOG(LOG_WARNING, "Could not load seed from /dev/urandom: %m");			seed = time(0);		}		if (fd >= 0) close(fd);		srand(seed);		initialized++;	}	return rand();}/* initialize a packet with the proper defaults */static void init_packet(struct dhcpMessage *packet, char type){	udhcp_init_header(packet, type);	memcpy(packet->chaddr, client_config.arp, 6);	if (client_config.clientid)	    add_option_string(packet->options, client_config.clientid);	if (client_config.hostname) add_option_string(packet->options, client_config.hostname);	if (client_config.fqdn) add_option_string(packet->options, client_config.fqdn);	add_option_string(packet->options, client_config.vendorclass);}/* Add a parameter request list for stubborn DHCP servers. Pull the data * from the struct in options.c. Don't do bounds checking here because it * goes towards the head of the packet. */static void add_requests(struct dhcpMessage *packet){	int end = end_option(packet->options);	int i, len = 0;	packet->options[end + OPT_CODE] = DHCP_PARAM_REQ;	for (i = 0; dhcp_options[i].code; i++)		if (dhcp_options[i].flags & OPTION_REQ)			packet->options[end + OPT_DATA + len++] = dhcp_options[i].code;	packet->options[end + OPT_LEN] = len;	packet->options[end + OPT_DATA + len] = DHCP_END;}/* Broadcast a DHCP discover packet to the network, with an optionally requested IP */int send_discover(unsigned long xid, unsigned long requested){	struct dhcpMessage packet;	init_packet(&packet, DHCPDISCOVER);	packet.xid = xid;	if (requested)		add_simple_option(packet.options, DHCP_REQUESTED_IP, requested);	add_requests(&packet);	LOG(LOG_DEBUG, "Sending discover...");	return udhcp_raw_packet(&packet, INADDR_ANY, CLIENT_PORT, INADDR_BROADCAST,				SERVER_PORT, MAC_BCAST_ADDR, client_config.ifindex);}/* Broadcasts a DHCP request message */int send_selecting(unsigned long xid, unsigned long server, unsigned long requested){	struct dhcpMessage packet;	struct in_addr addr;	init_packet(&packet, DHCPREQUEST);	packet.xid = xid;	add_simple_option(packet.options, DHCP_REQUESTED_IP, requested);	add_simple_option(packet.options, DHCP_SERVER_ID, server);	add_requests(&packet);	addr.s_addr = requested;	LOG(LOG_DEBUG, "Sending select for %s...", inet_ntoa(addr));	return udhcp_raw_packet(&packet, INADDR_ANY, CLIENT_PORT, INADDR_BROADCAST,				SERVER_PORT, MAC_BCAST_ADDR, client_config.ifindex);}/* Unicasts or broadcasts a DHCP renew message */int send_renew(unsigned long xid, unsigned long server, unsigned long ciaddr){	struct dhcpMessage packet;	int ret = 0;	init_packet(&packet, DHCPREQUEST);	packet.xid = xid;	packet.ciaddr = ciaddr;	add_requests(&packet);	LOG(LOG_DEBUG, "Sending renew...");	if (server)		ret = udhcp_kernel_packet(&packet, ciaddr, CLIENT_PORT, server, SERVER_PORT);	else ret = udhcp_raw_packet(&packet, INADDR_ANY, CLIENT_PORT, INADDR_BROADCAST,				SERVER_PORT, MAC_BCAST_ADDR, client_config.ifindex);	return ret;}/* Unicasts a DHCP release message */int send_release(unsigned long server, unsigned long ciaddr){	struct dhcpMessage packet;	init_packet(&packet, DHCPRELEASE);	packet.xid = random_xid();	packet.ciaddr = ciaddr;	add_simple_option(packet.options, DHCP_REQUESTED_IP, ciaddr);	add_simple_option(packet.options, DHCP_SERVER_ID, server);	LOG(LOG_DEBUG, "Sending release...");	return udhcp_kernel_packet(&packet, ciaddr, CLIENT_PORT, server, SERVER_PORT);}/* return -1 on errors that are fatal for the socket, -2 for those that aren't */int get_raw_packet(struct dhcpMessage *payload, int fd){	int bytes;	struct udp_dhcp_packet packet;	uint32_t source, dest;	uint16_t check;	memset(&packet, 0, sizeof(struct udp_dhcp_packet));	bytes = read(fd, &packet, sizeof(struct udp_dhcp_packet));	if (bytes < 0) {		DEBUG(LOG_INFO, "couldn't read on raw listening socket -- ignoring");		usleep(500000); /* possible down interface, looping condition */		return -1;	}	if (bytes < (int) (sizeof(struct iphdr) + sizeof(struct udphdr))) {		DEBUG(LOG_INFO, "message too short, ignoring");		return -2;	}	if (bytes < ntohs(packet.ip.tot_len)) {		DEBUG(LOG_INFO, "Truncated packet");		return -2;	}	/* ignore any extra garbage bytes */	bytes = ntohs(packet.ip.tot_len);	/* Make sure its the right packet for us, and that it passes sanity checks */	if (packet.ip.protocol != IPPROTO_UDP || packet.ip.version != IPVERSION ||	    packet.ip.ihl != sizeof(packet.ip) >> 2 || packet.udp.dest != htons(CLIENT_PORT) ||	    bytes > (int) sizeof(struct udp_dhcp_packet) ||	    ntohs(packet.udp.len) != (uint16_t) (bytes - sizeof(packet.ip))) {		DEBUG(LOG_INFO, "unrelated/bogus packet");		return -2;	}	/* check IP checksum */	check = packet.ip.check;	packet.ip.check = 0;	if (check != udhcp_checksum(&(packet.ip), sizeof(packet.ip))) {		DEBUG(LOG_INFO, "bad IP header checksum, ignoring");		return -1;	}	/* verify the UDP checksum by replacing the header with a psuedo header */	source = packet.ip.saddr;	dest = packet.ip.daddr;	check = packet.udp.check;	packet.udp.check = 0;	memset(&packet.ip, 0, sizeof(packet.ip));	packet.ip.protocol = IPPROTO_UDP;	packet.ip.saddr = source;	packet.ip.daddr = dest;	packet.ip.tot_len = packet.udp.len; /* cheat on the psuedo-header */	if (check && check != udhcp_checksum(&packet, bytes)) {		DEBUG(LOG_ERR, "packet with bad UDP checksum received, ignoring");		return -2;	}	memcpy(payload, &(packet.data), bytes - (sizeof(packet.ip) + sizeof(packet.udp)));	if (ntohl(payload->cookie) != DHCP_MAGIC) {		LOG(LOG_ERR, "received bogus message (bad magic) -- ignoring");		return -2;	}	DEBUG(LOG_INFO, "oooooh!!! got some!");	return bytes - (sizeof(packet.ip) + sizeof(packet.udp));}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美性一区二区| 91视频观看免费| 亚洲资源中文字幕| 亚洲欧美视频在线观看| 亚洲欧洲av在线| 亚洲柠檬福利资源导航| 一区二区三区中文免费| 亚洲无线码一区二区三区| 午夜一区二区三区视频| 免费观看91视频大全| 捆绑变态av一区二区三区| 国产精品综合在线视频| 成人在线视频首页| 99精品视频一区二区三区| 色综合视频一区二区三区高清| 一本一本大道香蕉久在线精品 | 亚洲www啪成人一区二区麻豆| 亚洲综合久久av| 日本亚洲电影天堂| 国产成a人无v码亚洲福利| 91在线观看免费视频| 9191国产精品| 欧美激情中文字幕一区二区| 亚洲精品免费在线| 精一区二区三区| 91在线看国产| 欧美成人精品1314www| 国产亚洲污的网站| 亚洲在线成人精品| 国产一区二区女| 在线免费观看日本欧美| 久久影院午夜论| 亚洲一区av在线| 国产成人av一区二区| 欧美色图在线观看| 国产偷v国产偷v亚洲高清| 一区二区三区中文字幕精品精品| 蜜乳av一区二区| 91论坛在线播放| 欧美一区二区视频观看视频 | 91福利精品视频| 精品卡一卡二卡三卡四在线| 中文字幕av资源一区| 性久久久久久久久| 成人av电影在线观看| 欧美疯狂做受xxxx富婆| 1000精品久久久久久久久| 青椒成人免费视频| 日本电影欧美片| 国产性色一区二区| 免费观看成人av| 欧美日韩国产另类不卡| 国产肉丝袜一区二区| 免费xxxx性欧美18vr| 色av成人天堂桃色av| 国产精品丝袜久久久久久app| 日本不卡视频在线| 日本久久一区二区| 欧美韩国日本不卡| 国产老女人精品毛片久久| 欧美三区免费完整视频在线观看| 国产精品久久国产精麻豆99网站| 精品一区二区综合| 欧美变态tickle挠乳网站| 香蕉乱码成人久久天堂爱免费| 99精品久久只有精品| 国产欧美日韩在线| 国产高清久久久| 久久夜色精品一区| 国产精品1区2区| 国产三级欧美三级日产三级99 | 91福利国产精品| 亚洲激情av在线| 日本道色综合久久| 亚洲欧美日韩系列| 日本高清成人免费播放| 亚洲一区在线看| 欧美日韩国产色站一区二区三区| 亚洲影视在线播放| 欧美性色黄大片| 日韩专区中文字幕一区二区| 欧美日韩精品一区二区在线播放| 性久久久久久久久久久久| 欧美日本一区二区三区| 秋霞午夜鲁丝一区二区老狼| 91精品国产综合久久蜜臀 | 国产精品灌醉下药二区| 成人网在线播放| 一区二区三区在线视频免费 | 在线成人av影院| 麻豆精品久久久| 中文成人综合网| 欧美在线你懂的| 九九九久久久精品| 亚洲欧洲三级电影| 精品视频在线免费看| 免费观看日韩av| 国产日韩欧美电影| 色综合天天综合给合国产| 天天综合色天天综合| 2020国产精品| 欧美在线小视频| 韩国三级中文字幕hd久久精品| 国产精品日产欧美久久久久| 91久久精品日日躁夜夜躁欧美| 午夜精品成人在线| 日韩精品一区二区三区在线| thepron国产精品| 亚洲成人精品一区| 久久久久9999亚洲精品| 91丨九色丨尤物| 麻豆精品视频在线观看免费| 中文字幕一区二区在线观看| 91精品国产丝袜白色高跟鞋| 成人午夜视频在线观看| 水野朝阳av一区二区三区| 久久久久久久电影| 欧美理论在线播放| 成人涩涩免费视频| 奇米一区二区三区| 亚洲自拍偷拍欧美| 国产视频视频一区| 337p亚洲精品色噜噜噜| 成人av在线资源网| 久久99精品一区二区三区| 亚洲女人小视频在线观看| 久久日韩精品一区二区五区| 91久久精品一区二区| 成人午夜在线免费| 国产高清久久久| 精品一区二区三区影院在线午夜| 一区二区三区高清| 国产精品免费网站在线观看| 精品免费一区二区三区| 欧美三区在线视频| 一本色道久久综合狠狠躁的推荐| 国产a精品视频| 国产在线一区二区| 香蕉久久夜色精品国产使用方法| 亚洲视频每日更新| 中日韩av电影| 日韩美女视频19| 亚洲国产成人在线| 国产午夜精品久久| 久久先锋影音av鲁色资源| 日韩精品中文字幕在线一区| 欧美日韩国产欧美日美国产精品| 91电影在线观看| 在线日韩国产精品| 欧美三级韩国三级日本三斤 | 麻豆国产一区二区| 美女视频第一区二区三区免费观看网站| 一区二区三区中文字幕精品精品 | 欧美色窝79yyyycom| 欧美中文字幕一二三区视频| 色老综合老女人久久久| 欧美在线制服丝袜| 欧美日本一区二区| 日韩午夜在线观看| 日韩欧美久久久| 久久综合久久综合九色| 久久精品亚洲乱码伦伦中文| 中文av一区二区| 一区二区三区中文字幕| 天天综合网 天天综合色| 蜜桃av一区二区三区| 国产乱人伦精品一区二区在线观看| 国产一区二区三区av电影| av在线综合网| 欧美午夜电影网| 日韩一区二区三区精品视频| 欧美zozozo| 中文字幕一区日韩精品欧美| 一区二区三区欧美日韩| 亚洲电影第三页| 久久99九九99精品| 成人黄色av网站在线| 欧美性xxxxxxxx| 日韩区在线观看| 日本一二三不卡| 亚洲一区二区av在线| 精品一区二区三区av| 成人av电影在线观看| 欧美老女人在线| 国产欧美一区二区精品久导航 | 337p亚洲精品色噜噜| 国产亚洲欧美激情| 亚洲国产乱码最新视频| 国产呦萝稀缺另类资源| 日本国产一区二区| 久久久久久久综合狠狠综合| 一区二区三区91| 国产伦精一区二区三区| 在线观看日产精品| 精品久久久久久久久久久久久久久| 国产精品色哟哟网站| 精品一区二区免费看| 欧美午夜寂寞影院| 国产亚洲欧美一级| 日韩综合小视频|