⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 win_if_list.c

📁 WLAN无线网络管理的最新程序
💻 C
字号:
/* * win_if_list - Display network interfaces with description (for Windows) * Copyright (c) 2004-2006, Jouni Malinen <j@w1.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. * * This small tool is for the Windows build to provide an easy way of fetching * a list of available network interfaces. */#include "includes.h"#include <stdio.h>#ifdef CONFIG_USE_NDISUIO#include <winsock2.h>#include <ntddndis.h>#else /* CONFIG_USE_NDISUIO */#include "pcap.h"#include <winsock.h>#endif /* CONFIG_USE_NDISUIO */#ifdef CONFIG_USE_NDISUIO/* from nuiouser.h */#define FSCTL_NDISUIO_BASE      FILE_DEVICE_NETWORK#define _NDISUIO_CTL_CODE(_Function, _Method, _Access) \	CTL_CODE(FSCTL_NDISUIO_BASE, _Function, _Method, _Access)#define IOCTL_NDISUIO_QUERY_BINDING \	_NDISUIO_CTL_CODE(0x203, METHOD_BUFFERED, \			  FILE_READ_ACCESS | FILE_WRITE_ACCESS)#define IOCTL_NDISUIO_BIND_WAIT \	_NDISUIO_CTL_CODE(0x204, METHOD_BUFFERED, \			  FILE_READ_ACCESS | FILE_WRITE_ACCESS)typedef struct _NDISUIO_QUERY_BINDING{	ULONG BindingIndex;	ULONG DeviceNameOffset;	ULONG DeviceNameLength;	ULONG DeviceDescrOffset;	ULONG DeviceDescrLength;} NDISUIO_QUERY_BINDING, *PNDISUIO_QUERY_BINDING;static HANDLE ndisuio_open(void){	DWORD written;	HANDLE h;	h = CreateFile(TEXT("\\\\.\\\\Ndisuio"),		       GENERIC_READ | GENERIC_WRITE, 0, NULL,		       OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL,		       INVALID_HANDLE_VALUE);	if (h == INVALID_HANDLE_VALUE)		return h;#ifndef _WIN32_WCE	if (!DeviceIoControl(h, IOCTL_NDISUIO_BIND_WAIT, NULL, 0, NULL, 0,			     &written, NULL)) {		printf("IOCTL_NDISUIO_BIND_WAIT failed: %d",		       (int) GetLastError());		CloseHandle(h);		return INVALID_HANDLE_VALUE;	}#endif /* _WIN32_WCE */	return h;}static void ndisuio_query_bindings(HANDLE ndisuio){	NDISUIO_QUERY_BINDING *b;	size_t blen = sizeof(*b) + 1024;	int i, error;	DWORD written;	char name[256], desc[256];	WCHAR *pos;	size_t j, len;	b = malloc(blen);	if (b == NULL)		return;	for (i = 0; ; i++) {		memset(b, 0, blen);		b->BindingIndex = i;		if (!DeviceIoControl(ndisuio, IOCTL_NDISUIO_QUERY_BINDING,				     b, sizeof(NDISUIO_QUERY_BINDING), b,				     (DWORD) blen, &written, NULL)) {			error = (int) GetLastError();			if (error == ERROR_NO_MORE_ITEMS)				break;			printf("IOCTL_NDISUIO_QUERY_BINDING failed: %d",			       error);			break;		}		pos = (WCHAR *) ((char *) b + b->DeviceNameOffset);		len = b->DeviceNameLength;		if (len >= sizeof(name))			len = sizeof(name) - 1;		for (j = 0; j < len; j++)			name[j] = (char) pos[j];		name[len] = '\0';		pos = (WCHAR *) ((char *) b + b->DeviceDescrOffset);		len = b->DeviceDescrLength;		if (len >= sizeof(desc))			len = sizeof(desc) - 1;		for (j = 0; j < len; j++)			desc[j] = (char) pos[j];		desc[len] = '\0';		printf("ifname: %s\ndescription: %s\n\n", name, desc);	}	free(b);}static void ndisuio_enum_bindings(void){	HANDLE ndisuio = ndisuio_open();	if (ndisuio == INVALID_HANDLE_VALUE)		return;	ndisuio_query_bindings(ndisuio);	CloseHandle(ndisuio);}#else /* CONFIG_USE_NDISUIO */static void show_dev(pcap_if_t *dev){	printf("ifname: %s\ndescription: %s\n\n",	       dev->name, dev->description);}static void pcap_enum_devs(void){	pcap_if_t *devs, *dev;	char err[PCAP_ERRBUF_SIZE + 1];	if (pcap_findalldevs(&devs, err) < 0) {		fprintf(stderr, "Error - pcap_findalldevs: %s\n", err);		return;	}	for (dev = devs; dev; dev = dev->next) {		show_dev(dev);	}	pcap_freealldevs(devs);}#endif /* CONFIG_USE_NDISUIO */int main(int argc, char *argv[]){#ifdef CONFIG_USE_NDISUIO	ndisuio_enum_bindings();#else /* CONFIG_USE_NDISUIO */	pcap_enum_devs();#endif /* CONFIG_USE_NDISUIO */	return 0;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -