取得系统中网卡MAC地址的三种方法 3L-^<'~-k;
网卡地址这个概念有点混淆不清。因为实际上有两个地址,mac地址和物理地址,一般说网卡地址我是指物理地址,不知道别人怎么看?物理地址指的是网卡上的存放地址的ROM里的地址,mac地址是这块卡工作的时候用的地址,一般情况下这两个地址是一样的,所以很多人都混用了,甚至不知道有区别 -_-# :ZdUx
^[TV;9I*
网卡工作的时候,一个以太网帧60到1514(不包括crc),帧的crc是网卡自动加的,前导码是自动加的。网卡目的地址和源地址是驱动程序加的.所以实际上网卡工作的时候用什么地址作为工作地址完全是由驱动程序决定的 :)因此,我们完全可以在不改变网卡的物理地址的情况下用软件方法改变具体的网卡的工作地址. !- C' }
b
hjZ7=
MAC地址一般保存在注册表里,可以修改,于是就有下面连个问题: "$p#&W69"J
H;<!TX.zD
第1,可以肆无忌弹的盗用ip, Vu0KtG9
(.K\Jg'Y6j
第2,可以破一些垃圾加密软件... \zXlN
x:K?\<
很多软件是通过网卡地址加密的,这里面有两种不同。有些做的比较好的是通过物理地址加密。有些是通过工作地址加密.通过工作地址加密的像通过guidgen,netbios等方法得到的地址都是mac地址。一般都可以用该方法破解。通过物理地址加密的有点难破,但是也不是没有办法。 ~WVO
gL$&@NY
]/]ju$l9Z
,S[K{y<
第一种方法使用Microsoft的Netbios API。 这是一套通过Winsock提供底层网络支持的命令。使用Netbios的最大缺点是您必须在系统中安装了Netbios服务(如果您在windows网络中启用了文件共享的话,这就不是问题了)。除此此外,这种方法又快又准确。 gLj?Ys
%@&a7JOL
OQ_stE2i
+2cs#i
Netbios API只包括了一个函数,就叫做Netbios。这个函数使用网络控制块(network control block)结构作为参数,这个结构告诉函数要做什么。结构的定义如下: bggusK<
WoL9V"]
typedef struct _NCB { B_3QQtjAl
exR^/|BR
UCHAR ncb_command; "5DJu~
V7CoZnz
UCHAR ncb_retcode; vTr34n
A,i()R'I
UCHAR ncb_lsn; vfvlB[
T!q_/[i~7
UCHAR ncb_num; o|S)C<w
<MD;@_Nz\
PUCHAR ncb_buffer; ru.5fQU
74vmt<Q
WORD ncb_length; NlR"$
'|K.k6
UCHAR ncb_callname[NCBNAMSZ]; ka7uK][
e]W0xC-
UCHAR ncb_name[NCBNAMSZ]; ?z` MPdO
2@@l {Y0f6
UCHAR ncb_rto; jThbeY[
\,W.0#D8v4
UCHAR ncb_sto; A-E+s~U8
<3
@}Lj
void (CALLBACK *ncb_post) (struct _NCB *); $7gB_o$zz
RpQ*!a~O
UCHAR ncb_lana_num; ='Oj4T
H;vZm[\0N-
UCHAR ncb_cmd_cplt; ~2%3FV^
Rmh*TQu
#ifdef _WIN64 Vk<k +=7
\&|CM8A
UCHAR ncb_reserve[18]; ?_4^le[;
:F|\Ij0T
#else *c]KHipUIS
<,39_#H?F3
UCHAR ncb_reserve[10]; W04av_u 5
P;foK)AM
#endif 4!%]fg}Um
NXoK@Y
HANDLE ncb_event; VK
.^v<Yo
w-FnE}"l
} NCB, *PNCB; ySX/=T:<;
'Tf9z+0;
_'iDF
HFh /$VM
重点在于ncb_command 成员。这个成员告诉Netbios该作什么。我们使用三个命令来探测MAC地址。他们在MSDN的定义如下: l)}t,!M6
b;vNq
命令描述: ]S/G\z
tW6#e(^l6
NCBENUM Windows NT/2000: 列举系统中网卡的数量。使用此命令后,ncb_buffer成员指向由LANA_ENUM结构填充的缓冲区。 u*R7zY
XCPb9<L
NCBENUM 不是标准的 NetBIOS 3.0 命令。 '"O&J}s;
T&}Ye\%
V:^H4WvL\W
9`X&,S~e
NCBRESET 重置网卡。网卡在接受新的NCB命令之前必须重置。 N=fz/CD)I
-q2MrJ*
NCBASTAT 接受本地或远程接口卡的状态。使用此命令后,ncb_buffer成员指向由ADAPTER_STATUS结构填充的缓冲区,随后是NAME_BUFFER结构的数组。 $adq7
mZoD033H
h)B!LAr
CyTFb$Z
下面就是取得您系统MAC地址的步骤: )mD\d|7f
Z] { @H
1》列举所有的接口卡。 JLUms
i&F~=Q`
2》重置每块卡以取得它的正确信息。 fGO*%)
g5}7y\
3》查询接口卡,取得MAC地址并生成标准的冒号分隔格式。 FN{/.?w(
&+;uZ-x
9+VF<;Xw
)+GX<2_
下面就是实例源程序。 EVz9WY
U>3
>Ex
n&7@@@cA
O)<r>vqe}
#include <windows.h> [t}):}~F|
nZW4} ~0j
#include <stdlib.h> O]_={%
7+8bL{
#include <stdio.h> %Rn:GK
%F3}/2
#include <iostream> Q<'@V@H
RK3.-
#include <string> #_p
=tq7z =k
bw;iz,Z
G-8n
using namespace std; p2a?9R
PdjCv+R6?
#define bzero(thing,sz) memset(thing,0,sz) #Y: ~UVV
/C7s vH
W:>J864!
0~.)GG%R>D
bool GetAdapterInfo(int adapter_num, string &mac_addr) ]-rczl|o
B%(K0`G#X
{ Ei~]iZ}
5F03y`@ u
// 重置网卡,以便我们可以查询 |w,^"j2R
*vXDuhQ
NCB Ncb; YiBOi?h9
nO:HB.&@
memset(&Ncb, 0, sizeof(Ncb)); {Ot[WF
KMe.i'
Ncb.ncb_command = NCBRESET; , Z4p0M
!r2}59J
Ncb.ncb_lana_num = adapter_num; .Wh6(LDY(
FBbm4NB
if (Netbios(&Ncb) != NRC_GOODRET) { B*BHF95!
'iGMn_&
mac_addr = "bad (NCBRESET): "; W=M<
c@
>]C<j4
mac_addr += string(Ncb.ncb_retcode); FcY$k%;'Q
y#nSk%"t"
return false; f0g6g!&gf
=X<)5IS3
} xz="|HD);
QZ:v
myffYK,
T+3k$G[e/
// 准备取得接口卡的状态块 3me<~u
$<14JEU
bzero(&Ncb,sizeof(Ncb); XuA0.b%
e ^-3etx
Ncb.ncb_command = NCBASTAT; ul}4p{ m[
vN'VDvVM
Ncb.ncb_lana_num = adapter_num; O} (E(v
|#!eMJ&0
strcpy((char *) Ncb.ncb_callname, "*"); $kM'
#fJwC7 4
struct ASTAT /;[}=JL<Q
-.^= Z!=M
{ ~ }Kp
55(J&q
ADAPTER_STATUS adapt; WNl&v]
Ae3,W
NAME_BUFFER NameBuff[30]; Am]2@ESUP
VoWA tNU
} Adapter; m]Hb+Y=;h
aGdpecv
bzero(&Adapter,sizeof(Adapter)); (cu'
!7ph,/P$7
Ncb.ncb_buffer = (unsigned char *)&Adapter; C8!8u?k
f&+XPd %
Ncb.ncb_length = sizeof(Adapter); BJ_+z gf`
p3{x <AO/
]L[JS^#7
PjiNu.>2(
// 取得网卡的信息,并且如果网卡正常工作的话,返回标准的冒号分隔格式。 |C&%S"*+D
Ks9FnDm8
if (Netbios(&Ncb) == 0) X!7cz t
Ompi~
{ 6@*5!,
?r^
hmu"a
char acMAC[18]; hg$qbeUl
ecM4]U
sprintf(acMAC, "%02X:%02X:%02X:%02X:%02X:%02X", "``W6W-(
^ uKnP>*l
int (Adapter.adapt.adapter_address[0]), bEoB;]
LuQ"E4;nY%
int (Adapter.adapt.adapter_address[1]), pE$|2v
~R"]LbeY
int (Adapter.adapt.adapter_address[2]), :|*Gnu
/8 e2dw:
\
int (Adapter.adapt.adapter_address[3]), s
ZlJ/_g
OHx,*}N
int (Adapter.adapt.adapter_address[4]), /&S~+~]n
a!TBk=P
int (Adapter.adapt.adapter_address[5])); 8<E!rn-
4r68`<mn[
mac_addr = acMAC; 6M
O|s1zk
!N@S^JD6
return true; z }FiU[Hs
UrD=|-r`
} ;PuyA
U-wq- GT
else M63s(f
7.w*+Z>z
{ `@ VM<av
J3]qg.B%z
mac_addr = "bad (NCBASTAT): "; HPu/. oE
krEH`f
mac_addr += string(Ncb.ncb_retcode); L:|X/c9r[
EqNz L*E
return false; ]Ct`4pA
=
]dz1~/
} Q#yu(
}1X11+/W
} Wto@u4
I?^Q084
3D 4]yR5
_WRR
3
int main() 4Zv.[V]iOO
kxr6sO~
{ =8$(i[;6w
gQ[]
// 取得网卡列表 97:t29N
Fy4<
LANA_ENUM AdapterList; c<JM1
KZp,=[t
NCB Ncb; mG}^'?^K
J]kP`
memset(&Ncb, 0, sizeof(NCB)); $ uz1
+l[Z2mW
Ncb.ncb_command = NCBENUM; i5L+8kx4
,T,B0
Ncb.ncb_buffer = (unsigned char *)&AdapterList; >q}
!>k$B
Z=e[
!c
Ncb.ncb_length = sizeof(AdapterList); 41
c^\1
mK7^:(<.LO
Netbios(&Ncb); }(f.uN_v
P ],)
V8KTNt%
FthXFxwx$
// 取得本地以太网卡的地址 LP0;n\
6.`} &E
string mac_addr; !R] CmK
Kdryl
for (int i = 0; i < AdapterList.length - 1; ++i) jFJW3az@z
?:{0
{ mCC:}n"#
wM2)KM}$
if (GetAdapterInfo(AdapterList.lana, mac_addr)) U 3wsWSO
B4\:2hBq
{ ]|((b/L3
hX'z]Am<
cout << "Adapter " << int (AdapterList.lana) << _4XoUE\\
`ohF?5J,
"'s MAC is " << mac_addr << endl; ]sm0E@ 1
*1ID`o
} ;S{Ld1;
O>b&-U"R
else i SAidK,
YP
.%CD(K
{ )"i>R
~*
k #,Gfs
cerr << "Failed to get MAC address! Do you" << endl; i$fjr[$B
~'Qpf 8)
cerr << "have the NetBIOS protocol installed?" << endl; w7`@=kVx
x jP" 'yU
break; 9`gGsC
!7,K9/"
} 8Jib|#!
'wT./&Z
} B4*X0x
63y':g
hNR>Hy\
yoA*\V
return 0; -;/@;W
4?*"7t3
} i}$N&
S#0|#Z5qD
x`=5l`
KoQ_:`
第二种方法-使用COM GUID API *`pec3"
3MBz
这种方法使用COM API创建一个GUID(全局唯一标识符)并从那里继承MAC地址。GUID通常用来标识COM组件以及系统中的其他对象。它们是由MAC地址(结合其他东西)计算得来的,表面上MAC地址就包含在其中。我说表面上是因为事实上并没有包含。 P7BJ?x
ru6H nLhL
我提供这种方法更多的是为了作为反面教材。您也许用这种方法能够得到MAC地址,但有时候您只会得到随机的十六进制数值。 t+4%,n f_1
gS(: c.
下面的例子十分简单,无需多讲。我们使用CoCreateGuid创建GUID,并将最后六个字节放入字符串中。它们可能是MAC地址,但并不是必然的。 9q0,K" x)
zOdasEd8!
/O(;~1B
1vR#FE?
#include <windows.h> JG+g88
Z+"E*
#include <iostream> "|l
oSf@
).O2_<&?F
#include <conio.h> wJ]$'c3
%.atWX`b
D!D%.
i$LV44
using namespace std; UNZVu~WnF
Jk6/i;4|
y
4,T
EK- bvZ
int main() l`5}i|4KTW
o y%g{,V
{ \Dsl7s=
as!|8JE`
cout << "MAC address is: "; I`n1M+=%
8`LLHX1|
ywsz"/=@
J\,e/{,X
// 向COM要求一个UUID。如果机器中有以太网卡, hoD[wAC
5-QvQ&eH.
// UUID最后的六个字节(Data4的2-7字节)应该是本地以太网卡的MAC地址。 raI~BIfe
C>K"ZJ
GUID uuid; $Ln2O#
j"$b%|
CoCreateGuid(&uuid); ?[>BssW
:#!F 7u
// Spit the address out $gD(MKR)~
;Wrd=)Ka
char mac_addr[18]; s)&R W#:X
8-g$HXqs_#
sprintf(mac_addr,"%02X:%02X:%02X:%02X:%02X:%02X", xzf)_ <
]I*#R9
uuid.Data4[2],uuid.Data4[3],uuid.Data4[4], |sZ9/G7
q&Ua(I
uuid.Data4[5],uuid.Data4[6],uuid.Data4[7]); h|/*yTuN.y
VT~
^:-]
cout << mac_addr << endl; cB])A57<
Y8CYkJTAD-
getch(); MvjwP?J]
+P6
return 0; m5Laq'~0_
XuAc3~HAd
} Yr(f iI
[?r\b
?Kz`
O>"6
ah@GSu;7
U>M>FZ
ljR?* P
第三种方法- 使用SNMP扩展API (S93 %ii
* jNu?$
我要讨论的第三种方法是使用Windows的SNMP(简单网络管理协议)扩展来取得MAC地址。在我的经验里,这个协议很简单。代码也是直勾勾的向前的。基本步骤和Netbios相同: P*^UU\x'4I
GMp'KEQQ
1》取得网卡列表 AxqTPx7`|
MS^hsUj}
2》查询每块卡的类型和MAC地址 F9G$$%Q-Z
[(^''*7r+T
3》保存当前网卡 GISI8W^
WAXrA$:3J
我个人对SNMP了解不多,但如我刚刚所言,代码十分清楚。 21J82M
g=' 2~c
2!& ;ZcT,
K0!#l Br
#include <snmp.h> I3=Sc^zz&V
Wv'B[;[)
#include <conio.h> Vblf6qaBs
#S74C*'8
#include <stdio.h> Cr\/<zy1-e
O#Ax P}
B!C32~[
3G0\i!*t
typedef bool(WINAPI * pSnmpExtensionInit) ( [8g\pPQ
C4d1*IQk
IN DWORD dwTimeZeroReference, OpX
HOI`F3#XI
OUT HANDLE * hPollForTrapEvent, sN/Xofh
kR|DzB7
OUT AsnObjectIdentifier * supportedView); 2F)OyE
;iI2K/ 3
/|^^v DL
8{^GC(W{]
typedef bool(WINAPI * pSnmpExtensionTrap) ( /u1zRw
GnHf9
JrR
OUT AsnObjectIdentifier * enterprise, W$ {sD|d-
BHBR_7
OUT AsnInteger * genericTrap, n6+MqN
8pKPbi;(2
OUT AsnInteger * specificTrap, !Dn1pjxc
|&*rSp2iH
OUT AsnTimeticks * timeStamp, _5 -"<
e/~<\
OUT RFC1157VarBindList * variableBindings); wA+4:CF@
VFp)`+8
RR {9
[9Hm][|Ph
typedef bool(WINAPI * pSnmpExtensionQuery) ( fC:\Gh5
f*f9:xUY
IN BYTE requestType, UE](`|4H
9K_HcLO%y
IN OUT RFC1157VarBindList * variableBindings, "@bk$o=
b<MMli
OUT AsnInteger * errorStatus, os+wTUR^
dKG<"
OUT AsnInteger * errorIndex); j>=".^J
(.t:sn"P
`l@t3/
h.%Qn vL
typedef bool(WINAPI * pSnmpExtensionInitEx) ( lw lW.C
:7]R2JP
OUT AsnObjectIdentifier * supportedView); BU .G~0
qoq<dCt3
1Ee>pbd
C8SNSeg
void main() dNmX<WXG
n m$G4Q
{ 6/C
J)~=b_'<
HINSTANCE m_hInst; NWcF9z%@
D'=`O6pK
pSnmpExtensionInit m_Init; JIkmtZv
:zZM&r>
pSnmpExtensionInitEx m_InitEx; z>q_]U0
gC:E38u
pSnmpExtensionQuery m_Query; 5Ww\h
7}?z=LHb3
pSnmpExtensionTrap m_Trap; s7gf7E#Y
LD"}$vfs
HANDLE PollForTrapEvent; [IW7]Fv<F
dv>zK#!
AsnObjectIdentifier SupportedView; iTyApLV
z#!Cg*K(
UINT OID_ifEntryType[] = {1, 3, 6, 1, 2, 1, 2, 2, 1, 3}; 5rhdm?Ls0
hYx^D>}]
UINT OID_ifEntryNum[] = {1, 3, 6, 1, 2, 1, 2, 1}; /qY(uPJ
~~
w4854
UINT OID_ipMACEntAddr[] = {1, 3, 6, 1, 2, 1, 2, 2, 1, 6}; t38T0Ao
Z ISd0hV
AsnObjectIdentifier MIB_ifMACEntAddr = ]5L3[A4Vu
%iML??S
{ sizeof(OID_ipMACEntAddr) sizeof(UINT), OID_ipMACEntAddr }; *]k"H`JoFC
F:U_gW?
AsnObjectIdentifier MIB_ifEntryType = Gj0NN:
Z/;SR""wa
{sizeof(OID_ifEntryType) sizeof(UINT), OID_ifEntryType}; m/h0J03'T
Ku# _
AsnObjectIdentifier MIB_ifEntryNum = ;W"[,#2TM
r
+fzmb
{sizeof(OID_ifEntryNum) sizeof(UINT), OID_ifEntryNum}; 3sNq3I
"*WXr$
RFC1157VarBindList varBindList; )FCqYCfk
n(MEG'9}
RFC1157VarBind varBind[2]; I!bZ-16X
y2>]gX5
AsnInteger errorStatus; >TJ$Z3
vUNE!j
AsnInteger errorIndex; 2HNS|GHb&
M?`06jQD.
AsnObjectIdentifier MIB_NULL = {0, 0}; 'LI)6;Yc
mLqm83
int ret; O@$i
C\[UAxZ3X
int dtmp; &kE|~i:=,9
oE&[W>,x
int i = 0, j = 0; C,rZ}-
7]Yd-vA
bool found = false; Li^V?
oPV"JGa/B4
char TempEthernet[13]; .:/@<V+K
q\"$~*
m_Init = NULL; N"{o3QmA
V-|}.kOH2
m_InitEx = NULL; '`"&RuB
F'!}$oT"
m_Query = NULL; %Z|*!A+wN5
V _,*
m_Trap = NULL; SfR_#"Uu
5{[0Clb)
TjdY Ck]'
fE iEy%o
/* 载入SNMP DLL并取得实例句柄 */ xg&vZzcl
P{ o/F
m_hInst = LoadLibrary("inetmib1.dll"); +aap/sYp
5kz`_\&
if (m_hInst < (HINSTANCE) HINSTANCE_ERROR) 4RNzh``u
}"v"^5
{ >XN&QVE
j3U8@tuG
m_hInst = NULL; x$*OglaS
aMWNZv
return; P[~a'u
MaM7u:kD#
} a6C~!{'nW
BVDo5^&W
m_Init = <T>f@Dn,
i|e-N?l
(pSnmpExtensionInit) GetProcAddress(m_hInst, "SnmpExtensionInit"); g=wnly
>?tpGEZ\
m_InitEx = Qpc>5p![3
D]REZuHOI
(pSnmpExtensionInitEx) GetProcAddress(m_hInst, Mtlj I6
o/#e
y
"SnmpExtensionInitEx"); `7`iCYiTy
191)JWfa
m_Query = .'M]cN~
a>6p])Wh
(pSnmpExtensionQuery) GetProcAddress(m_hInst, \uH;ng|m
Rh|&{Tf
"SnmpExtensionQuery"); e"Z~%,^A
T^ -RP
m_Trap = x.I-z@\E
cD]t%`*
(pSnmpExtensionTrap) GetProcAddress(m_hInst, "SnmpExtensionTrap"); P=.W.oS
P t$7U[N
m_Init(GetTickCount(), &PollForTrapEvent, &SupportedView); hO8B]4=&*
QQcJUOxT9
y)2]:nD`B
9j/B3CjW
/* 初始化用来接收m_Query查询结果的变量列表 */ B(hNBq7
.+.Pc_fv
varBindList.list = varBind; Im2g2]
i*3'O:Gq
varBind[0].name = MIB_NULL; a[!':-R`s
YGB|6p(
varBind[1].name = MIB_NULL; %O-wMl
G7u7x?E:B`
8@!SM
ouujd~b+
/* 在OID中拷贝并查找接口表中的入口数量 */ H3JWf
MlW
RAvV[QkT
varBindList.len = 1; /* Only retrieving one item */ f-PDgs
(Xx
@_
SNMP_oidcpy(&varBind[0].name, &MIB_ifEntryNum); 'sC{d&c
^(%>U!<<%,
ret = .[7m4iJf
Kgcg:r:
m_Query(ASN_RFC1157_GETNEXTREQUEST, &varBindList, &errorStatus, /dIiFr"e}G
"qF8'58
&errorIndex); GCrMrZ6
aDs[\'
printf("# of adapters in this system : %in", >PTq5pk
XS>4efCJ
varBind[0].value.asnValue.number); J?{uG8)
?U&onGy
varBindList.len = 2; Xa36O5$4]9
j&F&wRD%r
umc!KOkL
l ^{]pD
/* 拷贝OID的ifType-接口类型 */ u
VB&DE
3.soCyxmc
SNMP_oidcpy(&varBind[0].name, &MIB_ifEntryType); A\:M}D-(
Zu!3RN[lp?
P;h/)-q8
!9-dS=:Y
/* 拷贝OID的ifPhysAddress-物理地址 */ L_/.b%0)
Mb-C DPT
SNMP_oidcpy(&varBind[1].name, &MIB_ifMACEntAddr); tUzuel*
3N?uY2
#+XKfumLk
f"/NY6
do w$1.h'2
8YCtU9D
{ 7:]I@Gc'
7#Mi`W
]itvu :pl%
UJO+7h'
/* 提交查询,结果将载入 varBindList。 @>da%cX
k(et b#
可以预料这个循环调用的次数和系统中的接口卡数量相等 */ !r$/-8b
oo`mVRVf
ret = R5Ti|k.~Y"
KY@k4S+
m_Query(ASN_RFC1157_GETNEXTREQUEST, &varBindList, &errorStatus, o4d>c{p
}V09tK/M
&errorIndex); WFTTBUoH
<[(xGrEZV
if (!ret) )U5AnL
Dp>/lkk.
ret = 1; U<Ag=vsZE
Xod#$'M>
else _bW#*
Y5
m%akx@{WL
/* 确认正确的返回类型 */ Bp9
u6R
a93Aj
ret = SNMP_oidncmp(&varBind[0].name, &MIB_ifEntryType, (g5T2(_6L
6ZX{K1_q
MIB_ifEntryType.idLength); d^4!=^HN
8g$pfHt|e
if (!ret) { :0r@o:H
gmt`_Dpm$
j++; Tk)y*y
pX"f "
dtmp = varBind[0].value.asnValue.number; s %/3X\_
5E4np`J
printf("Interface #%i type : %in", j, dtmp); IpHGit28
(tys7og$'
_K'YaZTa;~
5s8k^n"A
/* Type 6 describes ethernet interfaces */ [i\K#O +f
g+U6E6}1
if (dtmp == 6) UkeX">
A+>+XA'
{ ONg_3vD{
GkVV%0;&J1
CPAizS
t '* L,
/* 确认我们已经在此取得地址 */ ^k/@y@%
j&u{a[Y/}
ret = K%)u zP
(zte 'F4
SNMP_oidncmp(&varBind[1].name, &MIB_ifMACEntAddr, 2e#hJ-/`-
RWK|?FD\<
MIB_ifMACEntAddr.idLength); 9/`T]s"
W
A-\2
if ((!ret) && (varBind[1].value.asnValue.address.stream != NULL)) 'jqkDPn
6ID@ 0
{ Sw%^&*J
!np-Jmi
if((varBind[1].value.asnValue.address.stream[0] == 0x44) `|+!H.3
uL`_Sdjw
&& (varBind[1].value.asnValue.address.stream[1] == 0x45) V-IXtQR
G,3.'S,7
&& (varBind[1].value.asnValue.address.stream[2] == 0x53) lh{U@,/
=[`B -?
&& (varBind[1].value.asnValue.address.stream[3] == 0x54) =HH}E/9z
s: pmB\
&& (varBind[1].value.asnValue.address.stream[4] == 0x00)) .liVlo@
YH@p\#Y
{ <BEM`2B
.7_<0&kW