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

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

?? l2_packet.c

?? hostapd無線AP工具
?? C
字號:
/* * WPA Supplicant - Layer2 packet handling * Copyright (c) 2003-2005, Jouni Malinen <jkmaline@cc.hut.fi> * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 as * published by the Free Software Foundation. * * Alternatively, this software may be distributed under the terms of BSD * license. * * See README and COPYING for more details. */#include <stdlib.h>#include <stdio.h>#include <string.h>#ifndef CONFIG_NATIVE_WINDOWS#include <sys/ioctl.h>#endif /* CONFIG_NATIVE_WINDOWS */#include <errno.h>#ifdef USE_DNET_PCAP#include <pcap.h>#ifndef CONFIG_WINPCAP#include <dnet.h>#endif#else /* USE_DNET_PCAP */#include <unistd.h>#include <sys/types.h>#include <sys/socket.h>#include <netinet/in.h>#include <netpacket/packet.h>#include <net/if.h>#endif /* USE_DNET_PCAP */#ifdef __linux__#include <arpa/inet.h>#endif /* __linux__ */#include "common.h"#include "eloop.h"#include "l2_packet.h"struct l2_packet_data {#ifdef USE_DNET_PCAP	pcap_t *pcap;#ifndef CONFIG_WINPCAP	eth_t *eth;#endif#else /* USE_DNET_PCAP */	int fd; /* packet socket for EAPOL frames */#endif /* USE_DNET_PCAP */	char ifname[100];	u8 own_addr[ETH_ALEN];	void (*rx_callback)(void *ctx, unsigned char *src_addr,			    unsigned char *buf, size_t len);	void *rx_callback_ctx;	int rx_l2_hdr; /* whether to include layer 2 (Ethernet) header in calls			* to rx_callback */};int l2_packet_get_own_addr(struct l2_packet_data *l2, u8 *addr){	memcpy(addr, l2->own_addr, ETH_ALEN);	return 0;}void l2_packet_set_rx_l2_hdr(struct l2_packet_data *l2, int rx_l2_hdr){	l2->rx_l2_hdr = rx_l2_hdr;}#ifdef USE_DNET_PCAP#ifndef CONFIG_WINPCAPstatic int l2_packet_init_libdnet(struct l2_packet_data *l2){	eth_addr_t own_addr;	l2->eth = eth_open(l2->ifname);	if (!l2->eth) {		printf("Failed to open interface '%s'.\n", l2->ifname);		perror("eth_open");		return -1;	}	if (eth_get(l2->eth, &own_addr) < 0) {		printf("Failed to get own hw address from interface '%s'.\n",		       l2->ifname);		perror("eth_get");		eth_close(l2->eth);		l2->eth = NULL;		return -1;	}	memcpy(l2->own_addr, own_addr.data, ETH_ALEN);	return 0;}#endif#ifdef CONFIG_WINPCAPint pcap_sendpacket(pcap_t *p, u_char *buf, int size);#endifint l2_packet_send(struct l2_packet_data *l2, u8 *buf, size_t len){	if (l2 == NULL)		return -1;#ifdef CONFIG_WINPCAP	return pcap_sendpacket(l2->pcap, buf, len);#else	return eth_send(l2->eth, buf, len);#endif}static void l2_packet_receive(int sock, void *eloop_ctx, void *sock_ctx){	struct l2_packet_data *l2 = eloop_ctx;	pcap_t *pcap = sock_ctx;	struct pcap_pkthdr hdr;	const u_char *packet;	struct l2_ethhdr *ethhdr;	unsigned char *buf;	size_t len;	packet = pcap_next(pcap, &hdr);	if (packet == NULL || hdr.caplen < sizeof(*ethhdr))		return;	ethhdr = (struct l2_ethhdr *) packet;	if (l2->rx_l2_hdr) {		buf = (unsigned char *) ethhdr;		len = hdr.caplen;	} else {		buf = (unsigned char *) (ethhdr + 1);		len = hdr.caplen - sizeof(*ethhdr);	}	l2->rx_callback(l2->rx_callback_ctx, ethhdr->h_source, buf, len);}#ifdef CONFIG_WINPCAPstatic void l2_packet_receive_timeout(void *eloop_ctx, void *timeout_ctx){	struct l2_packet_data *l2 = eloop_ctx;	pcap_t *pcap = timeout_ctx;	/* Register new timeout before calling l2_packet_receive() since	 * receive handler may free this l2_packet instance (which will	 * cancel this timeout). */	eloop_register_timeout(0, 100000, l2_packet_receive_timeout,			       l2, pcap);	l2_packet_receive(-1, eloop_ctx, timeout_ctx);}#endif /* CONFIG_WINPCAP */static int l2_packet_init_libpcap(struct l2_packet_data *l2,				  unsigned short protocol){	bpf_u_int32 pcap_maskp, pcap_netp;	char pcap_filter[100], pcap_err[PCAP_ERRBUF_SIZE];	struct bpf_program pcap_fp;	pcap_lookupnet(l2->ifname, &pcap_netp, &pcap_maskp, pcap_err);	l2->pcap = pcap_open_live(l2->ifname, 2500, 0, 10, pcap_err);	if (l2->pcap == NULL) {		fprintf(stderr, "pcap_open_live: %s\n", pcap_err);		fprintf(stderr, "ifname='%s'\n", l2->ifname);		return -1;	}#ifndef CONFIG_WINPCAP	if (pcap_datalink(l2->pcap) != DLT_EN10MB) {		if (pcap_set_datalink(l2->pcap, DLT_EN10MB) < 0) {			fprintf(stderr, "pcap_set_datalinke(DLT_EN10MB): %s\n",				pcap_geterr(l2->pcap));			return -1;		}	}#endif /* CONFIG_WINPCAP */	snprintf(pcap_filter, sizeof(pcap_filter),		 "ether dst " MACSTR " and ether proto 0x%x",		 MAC2STR(l2->own_addr), protocol);	if (pcap_compile(l2->pcap, &pcap_fp, pcap_filter, 1, pcap_netp) < 0)	{		fprintf(stderr, "pcap_compile: %s\n",			pcap_geterr(l2->pcap));		return -1;	}	if (pcap_setfilter(l2->pcap, &pcap_fp) < 0) {		fprintf(stderr, "pcap_setfilter: %s\n",			pcap_geterr(l2->pcap));		return -1;	}	pcap_freecode(&pcap_fp);#ifdef BIOCIMMEDIATE	/*	 * When libpcap uses BPF we must enable "immediate mode" to	 * receive frames right away; otherwise the system may	 * buffer them for us.	 */	{		unsigned int on = 1;		if (ioctl(pcap_fileno(l2->pcap), BIOCIMMEDIATE, &on) < 0) {			fprintf(stderr, "%s: cannot enable immediate mode on "				"interface %s: %s\n",				__func__, l2->ifname, strerror(errno));			/* XXX should we fail? */		}	}#endif /* BIOCIMMEDIATE */#ifdef CONFIG_WINPCAP	eloop_register_timeout(0, 100000, l2_packet_receive_timeout,			       l2, l2->pcap);#else	eloop_register_read_sock(pcap_get_selectable_fd(l2->pcap),				 l2_packet_receive, l2, l2->pcap);#endif	return 0;}struct l2_packet_data * l2_packet_init(	const char *ifname, const u8 *own_addr, unsigned short protocol,	void (*rx_callback)(void *ctx, unsigned char *src_addr,			    unsigned char *buf, size_t len),	void *rx_callback_ctx){	struct l2_packet_data *l2;	l2 = malloc(sizeof(struct l2_packet_data));	if (l2 == NULL)		return NULL;	memset(l2, 0, sizeof(*l2));	strncpy(l2->ifname, ifname, sizeof(l2->ifname));	l2->rx_callback = rx_callback;	l2->rx_callback_ctx = rx_callback_ctx;#ifdef CONFIG_WINPCAP	if (own_addr)		memcpy(l2->own_addr, own_addr, ETH_ALEN);#else	if (l2_packet_init_libdnet(l2))		return NULL;#endif	if (l2_packet_init_libpcap(l2, protocol)) {#ifndef CONFIG_WINPCAP		eth_close(l2->eth);#endif		free(l2);		return NULL;	}	return l2;}void l2_packet_deinit(struct l2_packet_data *l2){	if (l2 == NULL)		return;	if (l2->pcap)		pcap_close(l2->pcap);#ifdef CONFIG_WINPCAP	eloop_cancel_timeout(l2_packet_receive_timeout, l2, l2->pcap);#else	if (l2->eth)		eth_close(l2->eth);#endif	free(l2);}#else /* USE_DNET_PCAP */int l2_packet_send(struct l2_packet_data *l2, u8 *buf, size_t len){	int ret;	if (l2 == NULL)		return -1;	ret = send(l2->fd, buf, len, 0);	if (ret < 0)		perror("l2_packet_send - send");	return ret;}static void l2_packet_receive(int sock, void *eloop_ctx, void *sock_ctx){	struct l2_packet_data *l2 = eloop_ctx;	u8 buf[2300];	int res;	struct l2_ethhdr *ethhdr;	unsigned char *pos;	size_t len;	res = recv(sock, buf, sizeof(buf), 0);	if (res < 0) {		perror("l2_packet_receive - recv");		return;	}	if (res < sizeof(*ethhdr)) {		printf("l2_packet_receive: Dropped too short %d packet\n",		       res);		return;	}	ethhdr = (struct l2_ethhdr *) buf;	if (l2->rx_l2_hdr) {		pos = (unsigned char *) buf;		len = res;	} else {		pos = (unsigned char *) (ethhdr + 1);		len = res - sizeof(*ethhdr);	}	l2->rx_callback(l2->rx_callback_ctx, ethhdr->h_source, pos, len);}struct l2_packet_data * l2_packet_init(	const char *ifname, const u8 *own_addr, unsigned short protocol,	void (*rx_callback)(void *ctx, unsigned char *src_addr,			    unsigned char *buf, size_t len),	void *rx_callback_ctx){	struct l2_packet_data *l2;	struct ifreq ifr;	struct sockaddr_ll ll;	l2 = malloc(sizeof(struct l2_packet_data));	if (l2 == NULL)		return NULL;	memset(l2, 0, sizeof(*l2));	strncpy(l2->ifname, ifname, sizeof(l2->ifname));	l2->rx_callback = rx_callback;	l2->rx_callback_ctx = rx_callback_ctx;	l2->fd = socket(PF_PACKET, SOCK_RAW, htons(protocol));	if (l2->fd < 0) {		perror("socket(PF_PACKET, SOCK_RAW)");		free(l2);		return NULL;	}	strncpy(ifr.ifr_name, l2->ifname, sizeof(ifr.ifr_name));	if (ioctl(l2->fd, SIOCGIFINDEX, &ifr) < 0) {		perror("ioctl[SIOCGIFINDEX]");		close(l2->fd);		free(l2);		return NULL;	}	memset(&ll, 0, sizeof(ll));	ll.sll_family = PF_PACKET;	ll.sll_ifindex = ifr.ifr_ifindex;	ll.sll_protocol = htons(protocol);	if (bind(l2->fd, (struct sockaddr *) &ll, sizeof(ll)) < 0) {		perror("bind[PF_PACKET]");		close(l2->fd);		free(l2);		return NULL;	}	if (ioctl(l2->fd, SIOCGIFHWADDR, &ifr) < 0) {		perror("ioctl[SIOCGIFHWADDR]");		close(l2->fd);		free(l2);		return NULL;	}	memcpy(l2->own_addr, ifr.ifr_hwaddr.sa_data, ETH_ALEN);	eloop_register_read_sock(l2->fd, l2_packet_receive, l2, NULL);	return l2;}void l2_packet_deinit(struct l2_packet_data *l2){	if (l2 == NULL)		return;	if (l2->fd >= 0) {		eloop_unregister_read_sock(l2->fd);		close(l2->fd);	}			free(l2);}#endif /* USE_DNET_PCAP */void * l2_packet_set_ethhdr(struct l2_ethhdr *ethhdr, const u8 *dest,			    const u8 *source, u16 proto){	memcpy(ethhdr->h_dest, dest, ETH_ALEN);	memcpy(ethhdr->h_source, source, ETH_ALEN);	ethhdr->h_proto = htons(proto);	return (void *) (ethhdr + 1);}int l2_packet_get_ip_addr(struct l2_packet_data *l2, char *buf, size_t len){#ifdef __linux__	int s;	struct ifreq ifr;	struct sockaddr_in *saddr;	s = socket(PF_INET, SOCK_DGRAM, 0);	if (s < 0) {		perror("socket");		return -1;	}	memset(&ifr, 0, sizeof(ifr));	strncpy(ifr.ifr_name, l2->ifname, sizeof(ifr.ifr_name));	if (ioctl(s, SIOCGIFADDR, &ifr) < 0) {		perror("ioctl[SIOCGIFADDR]");		close(s);		return -1;	}	close(s);	saddr = (struct sockaddr_in *) &ifr.ifr_addr;	if (saddr->sin_family != AF_INET)		return -1;	snprintf(buf, len, "%s", inet_ntoa(saddr->sin_addr));	return 0;#else /* __linux__ */	return -1;#endif /* __linux__ */}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
琪琪一区二区三区| 亚洲一区二区影院| 喷水一区二区三区| 欧美午夜一区二区| 久久久一区二区三区| 五月综合激情网| 欧美午夜精品一区二区三区| 精品久久久久av影院 | 日韩美女视频在线| 日韩电影免费在线| 成人免费高清视频| 一区二区三区四区蜜桃| 色素色在线综合| 三级影片在线观看欧美日韩一区二区| 成人午夜精品在线| 中文字幕在线不卡视频| 成人丝袜高跟foot| 一区二区三区四区五区视频在线观看| 在线看一区二区| 日本在线不卡一区| 日韩亚洲欧美综合| 国产精品一区二区果冻传媒| 国产精品人成在线观看免费| 91视频一区二区三区| 免费国产亚洲视频| 国产日韩三级在线| 欧美精品aⅴ在线视频| 久久久久国产精品麻豆ai换脸| 亚洲男人天堂av| 91免费视频网| 麻豆精品一区二区三区| 国产精品成人午夜| 91精品国产麻豆| 不卡av电影在线播放| 亚洲综合在线免费观看| 精品欧美乱码久久久久久| 国产一区二区影院| 国产精品久久久久久久午夜片| 欧美精品第一页| 精品一区二区三区在线观看| 亚洲一区二区成人在线观看| 国产真实乱对白精彩久久| 亚洲国产欧美日韩另类综合 | 日韩一级免费一区| 国内精品国产成人国产三级粉色| 日韩免费电影一区| 色播五月激情综合网| 国产一区二区成人久久免费影院| 日韩亚洲欧美在线| 亚洲男人的天堂在线aⅴ视频| 91久久精品日日躁夜夜躁欧美| 一区二区三国产精华液| 日韩欧美国产系列| 久久久777精品电影网影网| 午夜激情一区二区| 精品久久久久久无| 婷婷六月综合网| 精品国产乱码久久久久久久久| 久久新电视剧免费观看| 欧美日韩激情一区二区| 亚洲人精品一区| 日韩一区二区三区高清免费看看| 国产精品99久久久久久久女警| 亚洲一区二区综合| 国产午夜亚洲精品理论片色戒| 欧美午夜精品久久久久久孕妇 | 日本一道高清亚洲日美韩| 国产亚洲欧美色| 欧美猛男超大videosgay| 免费看日韩a级影片| 亚洲一区二区欧美激情| 欧美日韩二区三区| 欧日韩精品视频| 91成人免费网站| caoporen国产精品视频| 国产精品1区二区.| 激情深爱一区二区| 久88久久88久久久| 久久国产麻豆精品| 久久激情综合网| 亚洲黄网站在线观看| 亚洲少妇屁股交4| 久久人人97超碰com| 国产午夜亚洲精品理论片色戒| 日韩一级大片在线观看| 在线一区二区三区| 亚洲精品一区二区三区蜜桃下载| 欧美一级片免费看| 国产精品妹子av| 99vv1com这只有精品| 欧美老肥妇做.爰bbww| 中文字幕综合网| 国产精品久久久久aaaa| 中文字幕av一区二区三区| 26uuu精品一区二区在线观看| 日韩欧美国产小视频| 国产精品色婷婷久久58| 欧美综合在线视频| 久久亚洲捆绑美女| 中文字幕不卡三区| 日本在线不卡视频| 97久久精品人人做人人爽50路| 欧美午夜精品免费| 久久久一区二区三区捆绑**| 一二三四区精品视频| 老司机精品视频在线| 精品国产制服丝袜高跟| 日韩欧美123| 精品国产乱码久久久久久影片| 亚洲精品伦理在线| 国产麻豆视频一区| 欧美男同性恋视频网站| 久久综合色8888| 五月婷婷激情综合网| 91丨九色丨蝌蚪丨老版| 国产亚洲精品aa午夜观看| 日本欧美一区二区三区乱码| 欧美这里有精品| 一区二区三区在线高清| 99热99精品| 亚洲午夜久久久久久久久久久| 精品久久免费看| 国产精品久久久久久久浪潮网站 | 欧美色精品在线视频| 欧美日韩在线三区| 久久先锋影音av| 亚洲午夜在线观看视频在线| 国产一区二区三区免费观看| 国产不卡在线视频| 欧美精品一区二区三区蜜桃| 日韩精品成人一区二区三区| 欧美中文字幕亚洲一区二区va在线 | 国产欧美一区在线| 丁香六月综合激情| 久久精品欧美一区二区三区不卡| 国产尤物一区二区| 久久亚区不卡日本| 成人动漫中文字幕| 日韩一区在线播放| 99久久久国产精品| 人人精品人人爱| 97精品国产露脸对白| 日日夜夜精品免费视频| 亚洲精品一区二区三区影院| 国产永久精品大片wwwapp| 中文字幕乱码日本亚洲一区二区 | 国产三级精品在线| av一二三不卡影片| 国产精品国产三级国产普通话三级 | 国产黄人亚洲片| 日韩欧美视频一区| 91蜜桃免费观看视频| 亚洲成人黄色影院| 精品国产免费视频| 欧美无砖砖区免费| aa级大片欧美| 在线免费亚洲电影| 国产精品久久久久一区二区三区| 7777精品伊人久久久大香线蕉完整版| 欧美精品三级在线观看| 日本精品一级二级| 国产精品无遮挡| 亚洲综合免费观看高清完整版 | 欧美日韩国产成人在线免费| 精品国产91乱码一区二区三区| 中文字幕一区二区三区不卡| 久久99精品网久久| 欧美片在线播放| 亚洲免费电影在线| 成人一区二区三区视频在线观看| 91麻豆精品国产91久久久久久久久 | 欧美在线免费观看亚洲| 国产欧美精品一区aⅴ影院| 捆绑调教美女网站视频一区| 4438x亚洲最大成人网| 亚洲国产精品影院| 欧美日韩你懂得| 美女视频黄免费的久久 | 国产午夜精品一区二区| 蜜桃视频一区二区三区在线观看| 在线观看日韩国产| 亚洲一区二区三区中文字幕| 91视频观看视频| 欧美激情资源网| 国产老女人精品毛片久久| 久久久久97国产精华液好用吗| 日韩精品一卡二卡三卡四卡无卡| 91黄色免费网站| 午夜精品福利在线| 久久免费国产精品| jlzzjlzz欧美大全| 日韩制服丝袜av| 国产精品国产三级国产aⅴ原创| 欧美网站大全在线观看| 国产精品原创巨作av| 国产精品免费视频网站| 日本韩国欧美在线| 天天做天天摸天天爽国产一区| 欧美日韩小视频| 久久精品国产99久久6|