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

📄 intf.c

📁 SinFP是一种新的识别对方计算机操作系统类型的工具
💻 C
字号:
/* * intf.c * * Copyright (c) 2001 Dug Song <dugsong@monkey.org> * * $Id: intf.c,v 1.4 2004/01/13 06:51:56 dugsong Exp $ */#include "config.h"#include <sys/types.h>#include <err.h>#include <errno.h>#include <stdio.h>#include <stdlib.h>#include <string.h>#include <unistd.h>#include "dnet.h"#include "mod.h"static intf_t	*intf;static voidusage(void){	fprintf(stderr, "Usage: dnet intf show\n"	    "       dnet intf get <name>\n"	    "       dnet intf set <name> "	    "[alias|dst|inet|link <addr> ...] [up|down|arp|noarp ...]\n"	    "       dnet intf src <ip>\n"	    "       dnet intf dst <ip>\n");	exit(1);}static char *flags2string(u_short flags){	static char buf[256];	buf[0] = '\0';		if (flags & INTF_FLAG_UP)		strlcat(buf, ",UP", sizeof(buf));	if (flags & INTF_FLAG_LOOPBACK)		strlcat(buf, ",LOOPBACK", sizeof(buf));	if (flags & INTF_FLAG_POINTOPOINT)		strlcat(buf, ",POINTOPOINT", sizeof(buf));	if (flags & INTF_FLAG_NOARP)		strlcat(buf, ",NOARP", sizeof(buf));	if (flags & INTF_FLAG_BROADCAST)		strlcat(buf, ",BROADCAST", sizeof(buf));	if (flags & INTF_FLAG_MULTICAST)		strlcat(buf, ",MULTICAST", sizeof(buf));		if (buf[0] != '\0')		return (buf + 1);	return (buf);}static intprint_intf(const struct intf_entry *entry, void *arg){	int i;		printf("%s:", entry->intf_name);		printf(" flags=0x%x<%s>", entry->intf_flags,	    flags2string(entry->intf_flags));		if (entry->intf_mtu != 0)		printf(" mtu %d", entry->intf_mtu);	printf("\n");		if (entry->intf_addr.addr_type == ADDR_TYPE_IP) {		if (entry->intf_dst_addr.addr_type == ADDR_TYPE_IP) {			printf("\tinet %s --> %s\n",			    addr_ntoa(&entry->intf_addr),			    addr_ntoa(&entry->intf_dst_addr));		} else			printf("\tinet %s\n", addr_ntoa(&entry->intf_addr));	}	if (entry->intf_link_addr.addr_type == ADDR_TYPE_ETH)		printf("\tlink %s\n", addr_ntoa(&entry->intf_link_addr));	for (i = 0; i < entry->intf_alias_num; i++)		printf("\talias %s\n", addr_ntoa(&entry->intf_alias_addrs[i]));		return (0);}intintf_main(int argc, char *argv[]){	struct intf_entry *entry;	struct addr *ap, addr;	char *cmd, buf[1024];		if (argc < 2)		usage();	cmd = argv[1];		entry = (struct intf_entry *)buf;	memset(entry, 0, sizeof(*entry));	entry->intf_len = sizeof(buf);	if ((intf = intf_open()) == NULL)		err(1, "intf_open");	if (strcmp(cmd, "show") == 0) {		if (intf_loop(intf, print_intf, NULL) < 0)			err(1, "intf_loop");	} else if (strcmp(cmd, "get") == 0) {		if (argc < 3)			usage();		strlcpy(entry->intf_name, argv[2], sizeof(entry->intf_name));		if (intf_get(intf, entry) < 0)			err(1, "intf_get");		print_intf(entry, NULL);	} else if (strcmp(cmd, "src") == 0) {		if (argc < 3 || addr_aton(argv[2], &addr) < 0)			usage();		if (intf_get_src(intf, entry, &addr) < 0)			err(1, "intf_get_src");		print_intf(entry, NULL);	} else if (strcmp(cmd, "dst") == 0) {		if (argc < 3 || addr_aton(argv[2], &addr) < 0)			usage();		if (intf_get_dst(intf, entry, &addr) < 0)			err(1, "intf_get_dst");		print_intf(entry, NULL);	} else if (strcmp(cmd, "set") == 0) {		if (argc < 4)			usage();				strlcpy(entry->intf_name, argv[2], sizeof(entry->intf_name));		for (argv += 3, argc -= 3; argc > 1; argv += 2, argc -= 2) {			if (strcmp(argv[0], "alias") == 0) {				ap = &entry->intf_alias_addrs				    [entry->intf_alias_num++];			} else if (strcmp(argv[0], "dst") == 0) {				ap = &entry->intf_dst_addr;			} else if (strcmp(argv[0], "inet") == 0) {				ap = &entry->intf_addr;			} else if (strcmp(argv[0], "link") == 0) {				ap = &entry->intf_link_addr;			} else				break;						if (addr_pton(argv[1], ap) < 0)				err(1, "invalid address: %s", argv[1]);		}		for ( ; argc > 0; argv++, argc--) {			if (strcmp(argv[0], "up") == 0)				entry->intf_flags |= INTF_FLAG_UP;			else if (strcmp(argv[0], "down") == 0)				entry->intf_flags &= ~INTF_FLAG_UP;			else if (strcmp(argv[0], "arp") == 0)				entry->intf_flags &= ~INTF_FLAG_NOARP;			else if (strcmp(argv[0], "noarp") == 0)				entry->intf_flags |= INTF_FLAG_NOARP;			else				usage();		}		if (intf_set(intf, entry) < 0)			err(1, "intf_set");	} else		usage();		intf_close(intf);	exit(0);}struct mod mod_intf = {	"intf",	MOD_TYPE_KERN,	intf_main};

⌨️ 快捷键说明

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