#include <snmp.h> #include <conio.h> #include <stdio.h>
typedef bool(WINAPI * pSnmpExtensionInit) ( IN DWORD dwTimeZeroReference, OUT HANDLE * hPollForTrapEvent, OUT AsnObjectIdentifier * supportedView);
typedef bool(WINAPI * pSnmpExtensionTrap) ( OUT AsnObjectIdentifier * enterprise, OUT AsnInteger * genericTrap, OUT AsnInteger * specificTrap, OUT AsnTimeticks * timeStamp, OUT RFC1157VarBindList * variableBindings);
typedef bool(WINAPI * pSnmpExtensionQuery) ( IN BYTE requestType, IN OUT RFC1157VarBindList * variableBindings, OUT AsnInteger * errorStatus, OUT AsnInteger * errorIndex);
typedef bool(WINAPI * pSnmpExtensionInitEx) ( OUT AsnObjectIdentifier * supportedView);
void main() { HINSTANCE m_hInst; pSnmpExtensionInit m_Init; pSnmpExtensionInitEx m_InitEx; pSnmpExtensionQuery m_Query; pSnmpExtensionTrap m_Trap; HANDLE PollForTrapEvent; AsnObjectIdentifier SupportedView; UINT OID_ifEntryType[] = {1, 3, 6, 1, 2, 1, 2, 2, 1, 3}; UINT OID_ifEntryNum[] = {1, 3, 6, 1, 2, 1, 2, 1}; UINT OID_ipMACEntAddr[] = {1, 3, 6, 1, 2, 1, 2, 2, 1, 6}; AsnObjectIdentifier MIB_ifMACEntAddr = { sizeof(OID_ipMACEntAddr) sizeof(UINT), OID_ipMACEntAddr }; AsnObjectIdentifier MIB_ifEntryType = {sizeof(OID_ifEntryType) sizeof(UINT), OID_ifEntryType}; AsnObjectIdentifier MIB_ifEntryNum = {sizeof(OID_ifEntryNum) sizeof(UINT), OID_ifEntryNum}; RFC1157VarBindList varBindList; RFC1157VarBind varBind[2]; AsnInteger errorStatus; AsnInteger errorIndex; AsnObjectIdentifier MIB_NULL = {0, 0}; int ret; int dtmp; int i = 0, j = 0; bool found = false; char TempEthernet[13]; m_Init = NULL; m_InitEx = NULL; m_Query = NULL; m_Trap = NULL;
/* 加载SNMP动态链接库并得到所需函数的地址 */ m_hInst = LoadLibrary("inetmib1.dll"); if (m_hInst < (HINSTANCE) HINSTANCE_ERROR) { m_hInst = NULL; return; } m_Init = (pSnmpExtensionInit) GetProcAddress(m_hInst, "SnmpExtensionInit"); m_InitEx = (pSnmpExtensionInitEx) GetProcAddress(m_hInst, "SnmpExtensionInitEx"); m_Query = (pSnmpExtensionQuery) GetProcAddress(m_hInst, "SnmpExtensionQuery"); m_Trap = (pSnmpExtensionTrap) GetProcAddress(m_hInst, "SnmpExtensionTrap"); m_Init(GetTickCount(), &PollForTrapEvent, &SupportedView);
/* 初始化m_Query将传回的变量列表 */ varBindList.list = varBind; varBind[0].name = MIB_NULL; varBind[1].name = MIB_NULL;
/* 拷贝OID以在接口表中查找到表目(适配器)数量 */ varBindList.len = 1; /* 仅处理一条记录 */ SNMP_oidcpy(&varBind[0].name, &MIB_ifEntryNum); ret = m_Query(ASN_RFC1157_GETNEXTREQUEST, &varBindList, &errorStatus, &errorIndex); printf("# of adapters in this system : %in", varBind[0].value.asnValue.number); varBindList.len = 2;
/* 拷贝入OID接口类型ifType */ SNMP_oidcpy(&varBind[0].name, &MIB_ifEntryType);
/* 拷贝入OID地址ifPhysAddress */ SNMP_oidcpy(&varBind[1].name, &MIB_ifMACEntAddr);
do {
/* 提交查询。应答将被填入varBindList。 Submit the query. Responses will be loaded into varBindList. 我们可以认为后续调用的执行次数与系统所报告的适配器数目相同。 */ ret = m_Query(ASN_RFC1157_GETNEXTREQUEST, &varBindList, &errorStatus, &errorIndex); if (!ret) ret = 1; else /* 确认已经返回正确的类型 */ ret = SNMP_oidncmp(&varBind[0].name, &MIB_ifEntryType, MIB_ifEntryType.idLength); if (!ret) { j++; dtmp = varBind[0].value.asnValue.number; printf("Interface #%i type : %in", j, dtmp);
/* 类型6标识以太网接口 */ if (dtmp == 6) {
/* 这里确认我们有了一个地址 */ ret = SNMP_oidncmp(&varBind[1].name, &MIB_ifMACEntAddr, MIB_ifMACEntAddr.idLength); if ((!ret) && (varBind[1].value.asnValue.address.stream != NULL)) { if((varBind[1].value.asnValue.address.stream[0] == 0x44) && (varBind[1].value.asnValue.address.stream[1] == 0x45) && (varBind[1].value.asnValue.address.stream[2] == 0x53) && (varBind[1].value.asnValue.address.stream[3] == 0x54) && (varBind[1].value.asnValue.address.stream[4] == 0x00)) { /* 忽略所有的拨号网络适配器 */ printf("Interface #%i is a DUN adaptern", j); continue; } if ((varBind[1].value.asnValue.address.stream[0] == 0x00) && (varBind[1].value.asnValue.address.stream[1] == 0x00) && (varBind[1].value.asnValue.address.stream[2] == 0x00) && (varBind[1].value.asnValue.address.stream[3] == 0x00) && (varBind[1].value.asnValue.address.stream[4] == 0x00) && (varBind[1].value.asnValue.address.stream[5] == 0x00)) { /* 忽略其他网络接口返回的NULL地址 */ printf("Interface #%i is a NULL addressn", j); continue; } sprintf(TempEthernet, "%02x%02x%02x%02x%02x%02x", varBind[1].value.asnValue.address.stream[0], varBind[1].value.asnValue.address.stream[1], varBind[1].value.asnValue.address.stream[2], varBind[1].value.asnValue.address.stream[3], varBind[1].value.asnValue.address.stream[4], varBind[1].value.asnValue.address.stream[5]); printf("MAC Address of interface #%i: %sn", j, TempEthernet);} } } } while (!ret); /* 遇到错误时停止。当我们遍历完所有需被测试的接口后会产生一个错误。 */ getch();
FreeLibrary(m_hInst); /* 释放邦定 */ SNMP_FreeVarBind(&varBind[0]); SNMP_FreeVarBind(&varBind[1]); } |
相关推荐
C语言获取mac地址和IP地址的源代码,Linux系统下面。
这里主要介绍读取网卡MAC地址的方法,适用于EasyARM-i.MX287A开发套件,其应用原理及配套示例也适用于下表1.1所列出的产品型号。 表1.1 适用产品型号 1.2 原理介绍 MAC(Media ...
网络游戏-MAC地址获取方法、网关设备、网络认证设备及网络系统.zip
网络游戏-MAC地址获取方法及系统、网络安全设备及可读存储介质.zip
摘要在以太网中,获取 MAC 地址常常是其他工作的前提,本实验要求使用系统提供的命令和利用 WinPcap 编程两种方式获取以太网中的主机的 MAC 地址,通过
判断网络是否可用: 注意!是判断网络是否可用,但网络可用不代表一定能上外网的! public static boolean isNetworkAvailable(Context context) { ConnectivityManager manager = (ConnectivityManager) context...
CentOS 6.5 在虚拟机中配置 IP 地址的三种...在 CentOS 6.5 中配置 IP 地址有三种方法:自动获取 IP 地址、手动设置 IP 地址和使用 NAT 模式。每种方法都有其优点和缺点,需要根据自己的需求和环境来选择合适的方法。
这是一个获取本地MAC地址小程序,实用性比较强,大家快来下载
Radius认证服务器是计算机网络安全中的一种非常重要的技术,基于MAC地址的Radius认证可以提供一种安全的客户认证方式,防止未经授权的访问和攻击。 Radius认证服务器可以使用开源软件来实现,并可以使用PHP语言实现...
CentOS 6.5 配置 IP 地址和 DNS 的三种方法 在 CentOS 6.5 系统中,配置 IP 地址和 DNS 是一个必不可少的步骤。这里我们将介绍三种配置 IP 地址和 DNS 的方法。 方法一:自动获取 IP 地址 在虚拟机中,我们可以...
MAC地址查询扫描器采用了多种扫描技术,能够快速的扫描网络中设备,通过网络辅助进行设备识别 1.支持局域网内以及跨网段扫描 2.多种MAC地址扫描技术智能介入扫描 3.五级变速,适应不同的系统资源和网络带宽 4.支持多...
该库允许发现每个网络接口的MAC地址,如果您只需要一个用于标识主机系统的MAC地址,则可以选择适当的接口(请参见下面的API + Examples )。 关于此库的一个常见误解是它报告访问某种后端的客户端的mac地址。 它...
此外,在查看 MAC 地址时,需要确保手机已经连接到网络,以便能够获取正确的 MAC 地址信息。 在实际应用中,MAC 地址常用于网络设备的身份验证和网络管理。例如,在 Wi-Fi 网络中,路由器可以根据 MAC 地址来过滤...
混杂模式下,以太网卡可以接收到所有网络中的数据包,而不仅仅是发送到自己的MAC地址的数据包。Sniffer 就是利用混杂模式来收集网络中的数据的。 知识点二:Sniffer 的基本原理 Sniffer 是一种网络嗅探器,可以...
内容索引:VC/C++源码,系统相关,网卡,MAC VC++ 获取网络配置及网卡MAC和IP地址,同时获得主机名、独立工作域、绑定的Ip地址、默认网关以及DNS等。
一台linux服务器受到ARP攻击,在使用... 您可能感兴趣的文章:php获取网卡的MAC地址支持WIN/LINUX系统详解Linux系统中网卡MAC地址克隆方法linux下修改MAC地址问题解决方法linux修改mac地址方法分享linux手动、自动更改网
在上面的代码中,我们首先使用 System.getProperty("os.name") 方法来获取当前操作系统的名称,然后根据操作系统的名称来选择不同的获取网卡物理地址的方法。在 Windows 操作系统中,我们使用 ipconfig 命令来获取...
(二)MAC与DHCP攻击:攻击者可以使用MAC地址来攻击银行系统的网络设备。为了防止这种攻击,可以限制MAC地址在客户端接口位置,并且使用DHCP Snooping功能来绑定MAC与IP地址。 (三)ARP攻击:攻击者可以使用ARP...
一款LAN下产看所欲计算机IP对应的MAC地址小工具,CMD模式下使用.WIN2000-WIN8系统下适用。(2分) 可执行 nbtscan -r 192.168.1.0/24 解压包里的cygwin1.dll要和nbtscan.exe放在一起
其中Cisco公司的千兆网络产品功能非常全面,可以解决用户在网络方面需要的可靠 性,线路冗余和平衡负载,故障迅速恢复连接,以及MAC地址在交换机上的端口限制,解 决网络接入的安全性问题。Cisco的GEC(Gigabit ...