取得系统中网卡MAC地址的三种方法 \zA3H$Df~
网卡地址这个概念有点混淆不清。因为实际上有两个地址,mac地址和物理地址,一般说网卡地址我是指物理地址,不知道别人怎么看?物理地址指的是网卡上的存放地址的ROM里的地址,mac地址是这块卡工作的时候用的地址,一般情况下这两个地址是一样的,所以很多人都混用了,甚至不知道有区别 -_-# SMB&sl
[zP}G?(
网卡工作的时候,一个以太网帧60到1514(不包括crc),帧的crc是网卡自动加的,前导码是自动加的。网卡目的地址和源地址是驱动程序加的.所以实际上网卡工作的时候用什么地址作为工作地址完全是由驱动程序决定的 :)因此,我们完全可以在不改变网卡的物理地址的情况下用软件方法改变具体的网卡的工作地址. LoJEchRK
r
da: ~
MAC地址一般保存在注册表里,可以修改,于是就有下面连个问题: .;bU["fn)
b/T k$&
第1,可以肆无忌弹的盗用ip, pXQ$n:e
(yEU9R$I"
第2,可以破一些垃圾加密软件... L1 k
l%i*.b(
很多软件是通过网卡地址加密的,这里面有两种不同。有些做的比较好的是通过物理地址加密。有些是通过工作地址加密.通过工作地址加密的像通过guidgen,netbios等方法得到的地址都是mac地址。一般都可以用该方法破解。通过物理地址加密的有点难破,但是也不是没有办法。 -c0*
e&(Wn2)o
KF#qz2S
if1)AE-
第一种方法使用Microsoft的Netbios API。 这是一套通过Winsock提供底层网络支持的命令。使用Netbios的最大缺点是您必须在系统中安装了Netbios服务(如果您在windows网络中启用了文件共享的话,这就不是问题了)。除此此外,这种方法又快又准确。 .hf%L1N%F
06pY10<>X
nC$c.K'
RcR-sbR
Netbios API只包括了一个函数,就叫做Netbios。这个函数使用网络控制块(network control block)结构作为参数,这个结构告诉函数要做什么。结构的定义如下: D&N3LH
Q0ezeo
typedef struct _NCB { 0iMfyW:
%[L/JJbP&Z
UCHAR ncb_command; &R<K>i
X`E}2|q'
UCHAR ncb_retcode; {~\:4
r|bGn#^
UCHAR ncb_lsn; #{)mr [c|
1csbuR?
UCHAR ncb_num; o {q8An)
WwKpZ67$R
PUCHAR ncb_buffer; 3-0jxx(
b9b`%9/L
WORD ncb_length; :IsJE6r
>*l2]3'`
UCHAR ncb_callname[NCBNAMSZ]; 7Y4D9pw
Csgby(D*O
UCHAR ncb_name[NCBNAMSZ]; =@P(cFJ/
8JMxA2tZhG
UCHAR ncb_rto; Vd)
%qw
cqb6]
UCHAR ncb_sto; hJ4 A5m.
u!VrMH
void (CALLBACK *ncb_post) (struct _NCB *); us:v/WTQ
$['`H)z
UCHAR ncb_lana_num; QS,_= <
(
\D%n8O
UCHAR ncb_cmd_cplt; OMjx,@9
Z#;\Rb.x7
#ifdef _WIN64 hn&NypI
3Dh{#"88
UCHAR ncb_reserve[18]; _|{pO7x]oG
!D
'A
#else S->S p
5VN~?#K
UCHAR ncb_reserve[10]; NfCo)C-t
O]25{L
#endif WUx2CK2N
h9. Yux
HANDLE ncb_event; z`dnS]q9
r6:nYyF$)v
} NCB, *PNCB; W3MH8z
V<n#%!M5gV
tKi^0vE8
<V8=*n"mR
重点在于ncb_command 成员。这个成员告诉Netbios该作什么。我们使用三个命令来探测MAC地址。他们在MSDN的定义如下: qV$0 ";d
VhgcvS@V
命令描述: s"wz !{G4
0|rdI,z
NCBENUM Windows NT/2000: 列举系统中网卡的数量。使用此命令后,ncb_buffer成员指向由LANA_ENUM结构填充的缓冲区。 IPY[x|
q6
4bP4K
NCBENUM 不是标准的 NetBIOS 3.0 命令。 <z
wI@i
<j_
eTtiAF=bW
#
o\&G@e}
NCBRESET 重置网卡。网卡在接受新的NCB命令之前必须重置。 gF~
}
0}Qd
NCBASTAT 接受本地或远程接口卡的状态。使用此命令后,ncb_buffer成员指向由ADAPTER_STATUS结构填充的缓冲区,随后是NAME_BUFFER结构的数组。 C*Y0GfW=
_oU~S$hO
cyI:dvg
WD7T&i
下面就是取得您系统MAC地址的步骤: n4AQ
o-AAx#@
1》列举所有的接口卡。 0gKSjTqo
Aacj?
2》重置每块卡以取得它的正确信息。 t$uj( y>
OF(tCK
3》查询接口卡,取得MAC地址并生成标准的冒号分隔格式。 W%#LHluP
M;0\fUh;
%BkPkQA
C9`x"$
下面就是实例源程序。 5PKdMEK|q
E{B40E~4
{1vlz>82
q0_Pl*
#include <windows.h> )x&>Cf<,
SYv5{bff =
#include <stdlib.h> j&,%v+x
S'q4va"
#include <stdio.h> 04#r'UIF
=I)Ex)
#include <iostream> _M[T8 "e(
(ZK(ODn)i
#include <string> _8?r!D#P;s
f{R/rb&iB
pW2-RHGJY
].
^e[v6
using namespace std; 'n!Sco)C
5'"9)#Ve
#define bzero(thing,sz) memset(thing,0,sz) Ktf lbI!
Ni61o?]Nj
|+Ub3<b[]
#xxs^Kbqa#
bool GetAdapterInfo(int adapter_num, string &mac_addr) gG46hO-M%x
fh}j)*K8
{ |uln<nM9
K1fnHpK
// 重置网卡,以便我们可以查询 -Wl79lE
H?'t>JX
NCB Ncb; U\tujK1
nnnq6Z}
memset(&Ncb, 0, sizeof(Ncb)); d-$/C| J
JwmH_nJ(
Ncb.ncb_command = NCBRESET; 4kf8Am(
P:HmT
Ncb.ncb_lana_num = adapter_num; K2pW|@~U
?(j:F2dU~
if (Netbios(&Ncb) != NRC_GOODRET) { r(/+-
t
!W45X}/o
mac_addr = "bad (NCBRESET): "; l0{R`G,
j}@n`[V1
mac_addr += string(Ncb.ncb_retcode); ns !Mqcm
JXF@b-c
return false; Q>>II|~;J
K<ok1g'0
} \@:mq]Y
LD)P.
f
]kyGm2Ty9
Fop'm))C8
// 准备取得接口卡的状态块 .
,n>#lL
U_C1GT-|
bzero(&Ncb,sizeof(Ncb); %$SO9PY
6"Rw&3D?
Ncb.ncb_command = NCBASTAT; +d,Z_ 6F
0N>R!
Ncb.ncb_lana_num = adapter_num; =G%L:m*
XVkCYh4,
strcpy((char *) Ncb.ncb_callname, "*"); "\M^jO
S-KHot ?
struct ASTAT >-Q=o,cl%3
A"~4|`W
{ {Zy)p%j8
IH~[/qNk
ADAPTER_STATUS adapt; <ULydBom
'z3I*[!
NAME_BUFFER NameBuff[30]; ^N:bT;;$nZ
Q !G^CG
} Adapter; 6'1m3<G_
XhG3Of-6
bzero(&Adapter,sizeof(Adapter)); O;?Nz:/q
uu+)r
Ncb.ncb_buffer = (unsigned char *)&Adapter; *.F4?i2D
use`
y^c
Ncb.ncb_length = sizeof(Adapter); ptEChoZ6
h1.<\GO
Y|96K2BR
j?y_ H[Z
// 取得网卡的信息,并且如果网卡正常工作的话,返回标准的冒号分隔格式。 HH94?&
80;^]l
if (Netbios(&Ncb) == 0) lcYjwA
Z</.Ss 4
{ -7:_Dy
%T'<vw0
char acMAC[18]; i-*ZW:
%?z8*G]M
sprintf(acMAC, "%02X:%02X:%02X:%02X:%02X:%02X", Ea\Khf]2
b;%>?U`>p
int (Adapter.adapt.adapter_address[0]), :927y
&pZncm
int (Adapter.adapt.adapter_address[1]), RYuR&0_{
d/Y#oVI
int (Adapter.adapt.adapter_address[2]), wmnh7'|0u
MGE8S$Z
int (Adapter.adapt.adapter_address[3]), QNesiV0MI
.-HwT3
int (Adapter.adapt.adapter_address[4]), - HiRXB
#[.aj2
int (Adapter.adapt.adapter_address[5])); | )M>;q
o6T'U#7P
mac_addr = acMAC; @J UCXm
#cy;((z uB
return true; )7s(]~z
U/l3C(bc!
} sw$$I~21
Ty;P`Uv]r
else Ne9S90HsB6
Iu|4QE
{ pDV8B/{
A{Dy3tm=
mac_addr = "bad (NCBASTAT): "; bx8;`QMX
{YigB
mac_addr += string(Ncb.ncb_retcode); Usz O--.C
@[. 0,
return false; aT"0tn^LO
^(on"3sG
} H4"'&A7$
s2*~n_B
} -h8@B+
y0_z_S#gO
r!e:sJAB.
NY3.?@Z
int main() "1HKD
qe<aJn
{ r:-,qy
%"CF-K@th
// 取得网卡列表 f'?FYBL
*9O@DF&*6
LANA_ENUM AdapterList; <b#1L
&-zW1wf
NCB Ncb; L| K8
zW9/[Db
memset(&Ncb, 0, sizeof(NCB)); &ku.Q3xGs
+nU=)x?38
Ncb.ncb_command = NCBENUM; 33z^Q`MTC
IB\O[R$x
Ncb.ncb_buffer = (unsigned char *)&AdapterList; }NpN<C+
wlsq[xP
Ncb.ncb_length = sizeof(AdapterList); 0 n}2D7
,y}@I"
Netbios(&Ncb); *r(Qy0(
{U"=}j(
d`9ofw~3=
z,xGjSP
// 取得本地以太网卡的地址 :Fh#"<A&&
l#bE_PD;
string mac_addr; BHN EP |=
+*L<"@
for (int i = 0; i < AdapterList.length - 1; ++i) k$3Iv"gbx
Cm%|hk>fQ
{ ,4--3 MU
GW,RE\Q:
if (GetAdapterInfo(AdapterList.lana, mac_addr)) <\`qRz0/
"el}9OitC
{ ~1:_wni
Xb2.t^
]f
cout << "Adapter " << int (AdapterList.lana) << 7.FD16
_?v&\j
"'s MAC is " << mac_addr << endl; !q!5D`
h,|. qfUk
} >["X(%&w
z9Nial`p
else <%?!3 n*
c"lblt5
{ QERj`/g
w:aV2
cerr << "Failed to get MAC address! Do you" << endl; Z;~ 7L*|
S\L^ZH?[2
cerr << "have the NetBIOS protocol installed?" << endl; H/}W_ h^^
bJoP@s
break; +$$5Cv5#<&
&lnM
1W
} Ubm]V{7
COA*Q
} Qv6-,6<
N"8'=wB
Y^tUcBm\
=z!/:M
return 0; unc8WXW
L<k(stx~
} 46U*70
RQYD#4|
o1R:1!"2
c2Wp 8l
第二种方法-使用COM GUID API sB8v:
MO@XbPZB
这种方法使用COM API创建一个GUID(全局唯一标识符)并从那里继承MAC地址。GUID通常用来标识COM组件以及系统中的其他对象。它们是由MAC地址(结合其他东西)计算得来的,表面上MAC地址就包含在其中。我说表面上是因为事实上并没有包含。 {Y|?~ha#
,!dVhG#
我提供这种方法更多的是为了作为反面教材。您也许用这种方法能够得到MAC地址,但有时候您只会得到随机的十六进制数值。 3b[.s9Q
K_F"j!0
下面的例子十分简单,无需多讲。我们使用CoCreateGuid创建GUID,并将最后六个字节放入字符串中。它们可能是MAC地址,但并不是必然的。 GIhX2EvAS
5Nl?Km~
Ug )eyu
q.VZ P
#include <windows.h> gH
yJ~
[ji')PCAi;
#include <iostream> $Y M(NC
C#n.hgo>I
#include <conio.h> tMH2
M|fC2[]v B
*Hz]<b?
fd$nAE
using namespace std; @MP ;/o+
*k@D4F ruP
QB3er]y0%
dU-nE5
int main() zX]l$Q+
.d6b?t
{ 1`GW>ZKv
DE+k'8\T
cout << "MAC address is: "; UCj{
&
fp}5QUm-
QmMA]Q
X?o6=)SC|
// 向COM要求一个UUID。如果机器中有以太网卡, 7{\6EC}d[&
~r_2V$sC2
// UUID最后的六个字节(Data4的2-7字节)应该是本地以太网卡的MAC地址。 TE:|w
Xe
kB.CeG]tk
GUID uuid; 2!R+5^Iy
PD~vq^@Q
CoCreateGuid(&uuid); s|I$c;>
CEAmb[h
// Spit the address out vNju|=Lo
9_O6Sl
char mac_addr[18]; |w{C!Q8l
wg<t*6&'x
sprintf(mac_addr,"%02X:%02X:%02X:%02X:%02X:%02X", 45k.U $<|
<}T7;knO
uuid.Data4[2],uuid.Data4[3],uuid.Data4[4], Yv.7-DHNl
Xl:.`{5L
uuid.Data4[5],uuid.Data4[6],uuid.Data4[7]); a(kY,<}
v
6s]X*l?
cout << mac_addr << endl; ^1y D&i'q
!%[fi[p
getch(); hj}PL
OF2W UcQ
return 0; a"`>J!
WL?qulC}h1
} sX-@
>%l
c
dWg_WBC
r'4Dj&9Ac
Ww"]3
t37<<5A
N<b~,[yCd>
第三种方法- 使用SNMP扩展API xIwILY|W=
SLRF\mh!L
我要讨论的第三种方法是使用Windows的SNMP(简单网络管理协议)扩展来取得MAC地址。在我的经验里,这个协议很简单。代码也是直勾勾的向前的。基本步骤和Netbios相同: +cM~|
h^
K]ASj
1》取得网卡列表 [N#4H3GM8
Km,%p@`m
2》查询每块卡的类型和MAC地址 q0DRT4K
[RY Rt/?Q
3》保存当前网卡 J=&}$
|*DkriYY
我个人对SNMP了解不多,但如我刚刚所言,代码十分清楚。 -{q'Tmst
upZtVdd
FmhAUe
V(8,94vm
#include <snmp.h> j^WYMr,
j+rY
#include <conio.h> :5BCW68le
=k>fW7e
#include <stdio.h> m41%?uC/
3.1%L"r[)
)7X$um
RB6Q>3g
typedef bool(WINAPI * pSnmpExtensionInit) ( Kr[oP3
s4QCun~m
IN DWORD dwTimeZeroReference, /4N ?v. jf
*;xGH
OUT HANDLE * hPollForTrapEvent, 3@:O1i
#SG.`J<%
OUT AsnObjectIdentifier * supportedView); dS\!tdHP-Q
-2(?O`tZ
IMBjI#\
-+M360
typedef bool(WINAPI * pSnmpExtensionTrap) ( o)>iHzR</
i"xV=.
OUT AsnObjectIdentifier * enterprise, ,FXc_BCx4
!zvOCAb,
OUT AsnInteger * genericTrap, K|l}+:k
*[m:4\
OUT AsnInteger * specificTrap, y/:%S2za>
d!4TwpIgx
OUT AsnTimeticks * timeStamp, G&@dJ &B
QBG jH^kL
OUT RFC1157VarBindList * variableBindings); I ~^Xw7
!XM<`H/
uE<8L(*B
^B%c3U$o
typedef bool(WINAPI * pSnmpExtensionQuery) ( 00{a}@n
B:Ft(,
IN BYTE requestType, {bR2S&=OmK
`SOQPAnK+;
IN OUT RFC1157VarBindList * variableBindings, RRpY%-8M
\yZVn6GVr
OUT AsnInteger * errorStatus, i7Cuc+j8
3%Eu$|B
OUT AsnInteger * errorIndex); :U *8S\$
n#}~/\P6
^#Mp@HK
N/ '
typedef bool(WINAPI * pSnmpExtensionInitEx) ( .ZV='i()X
j S[#R_
OUT AsnObjectIdentifier * supportedView); fVf:voh
9D Nd} rXO
(wu ciKQ
p*)I QM<B
void main() c~O
Lr
TUz4-Pd
{ 9_nbMs
'=%`;?j
HINSTANCE m_hInst; vm{8x o
+2}cR66%
pSnmpExtensionInit m_Init; [ZC\8tP`V
%P M#gnt@
pSnmpExtensionInitEx m_InitEx; 9#m3<oSJ
KO%$
pSnmpExtensionQuery m_Query; Xdo\DQn
?Z_T3/ f
pSnmpExtensionTrap m_Trap; _x1W\#
/CMgWGI
HANDLE PollForTrapEvent; 09trFj$L
7(uz*~Z?`0
AsnObjectIdentifier SupportedView; dP+wcl4
U#]J5'i
UINT OID_ifEntryType[] = {1, 3, 6, 1, 2, 1, 2, 2, 1, 3}; B :S8{
de)4)EzUP
UINT OID_ifEntryNum[] = {1, 3, 6, 1, 2, 1, 2, 1}; c;Tp_e@
x,]x>Up
UINT OID_ipMACEntAddr[] = {1, 3, 6, 1, 2, 1, 2, 2, 1, 6}; JN4gH4ez)
e^3D`GA
AsnObjectIdentifier MIB_ifMACEntAddr = M.
%
p'^5
$5.52
{ sizeof(OID_ipMACEntAddr) sizeof(UINT), OID_ipMACEntAddr }; E?czolNl
bmK
AsnObjectIdentifier MIB_ifEntryType = 1#%H!GKvTU
ot[ZFF\
{sizeof(OID_ifEntryType) sizeof(UINT), OID_ifEntryType}; AIY 1sSK
c*.
AsnObjectIdentifier MIB_ifEntryNum = LTo5v
F8dr-"G
{sizeof(OID_ifEntryNum) sizeof(UINT), OID_ifEntryNum}; >
Xh=P%
jex\5
RFC1157VarBindList varBindList; WW{_D
'*65j
RFC1157VarBind varBind[2]; dKCl#~LAI'
3)ox8,{%}
AsnInteger errorStatus; %8|lAMTY7/
-gk2$P-
AsnInteger errorIndex; TukhGgmF
J]XLWAM
AsnObjectIdentifier MIB_NULL = {0, 0}; t!SxJB e
WeaT42*Q{
int ret; Hg<aU*o;
nW"O+s3
int dtmp; VevG 64o
K-)!d$$
int i = 0, j = 0; D_0sXIbg
ybqmPT'|_
bool found = false; )W>$_QxbN
T#i;=NP"
char TempEthernet[13]; x {Utf$|
nOd;Zw
m_Init = NULL; XHj%U
O8b#'f~
m_InitEx = NULL; cW_wIy\]&
i%.k{MY
m_Query = NULL; bf+C=A)s0
aJf3rHX
m_Trap = NULL; u"(NN9s
Y'~O_coG
!j`<iPI7B
UkpTK8>&
/* 载入SNMP DLL并取得实例句柄 */ *]NfT}}
}BU%<5CQ
m_hInst = LoadLibrary("inetmib1.dll"); ?A7 AVR
-,+C*|mu
if (m_hInst < (HINSTANCE) HINSTANCE_ERROR) m//aAxmB
NJgu`@YoI
{ WZn;u3,R
;Ivv4u
m_hInst = NULL; %(p9AE
`ovMfL.u
return; KJ32L
Q"D
} j0~am,yZ
jT$J~MpHh
m_Init = 6xtgnl#T
uA[
:
(pSnmpExtensionInit) GetProcAddress(m_hInst, "SnmpExtensionInit"); TP {\V>*Yz
|v8hg])I+
m_InitEx = bRyxP2
ym%` l!
(pSnmpExtensionInitEx) GetProcAddress(m_hInst, #}B1W&\sw
J.XhP_aT
"SnmpExtensionInitEx"); <uB)u>3
}DM W,+3
m_Query = gBhX=2%
zJW2F_
(pSnmpExtensionQuery) GetProcAddress(m_hInst, f~\H|E8(
ZCj1Cz]"l<
"SnmpExtensionQuery"); SyI~iW#Y1
Qt{){uE
m_Trap = iTq&h=(n
tt2
S.j
(pSnmpExtensionTrap) GetProcAddress(m_hInst, "SnmpExtensionTrap"); 9ghzK?Yc
X"d"a={]
m_Init(GetTickCount(), &PollForTrapEvent, &SupportedView); y3b"'-%
M0xhcU_
-*KKrte
$%\6"P/64
/* 初始化用来接收m_Query查询结果的变量列表 */ qMVuFwPhi
yOQae m^O
varBindList.list = varBind; gAorb\iJ
Z;a)P.l.>
varBind[0].name = MIB_NULL; F7O*%y.';
4]m{^z`1
varBind[1].name = MIB_NULL; dWkQ NFKF
'A.5T%n-
(>A#|N1U
4GF3.?3
/* 在OID中拷贝并查找接口表中的入口数量 */ "Zhh>cz
;z9,c
varBindList.len = 1; /* Only retrieving one item */ NYP3u_
QX
sV2D:%\K:
SNMP_oidcpy(&varBind[0].name, &MIB_ifEntryNum); L5 Cfa-
i"iy 0?
ret = K/Yeh<_&
![ce }
m_Query(ASN_RFC1157_GETNEXTREQUEST, &varBindList, &errorStatus, y[.lfW?)
EG qu-WBS
&errorIndex); z-kv{y*Hu
s<# BxN
printf("# of adapters in this system : %in", h7fytO
us?q^>u
varBind[0].value.asnValue.number); DoFe:+_U3
Z]Udx
varBindList.len = 2; *,CJ 3<>
lMu9Dp
9y&;6V.'
Xw'sh#i2
/* 拷贝OID的ifType-接口类型 */ 0nCiN;sA
2e1%L,y{W
SNMP_oidcpy(&varBind[0].name, &MIB_ifEntryType); oY0b8=[
_F[a2PE2+
1G12FV>M
@fmp2!?6
/* 拷贝OID的ifPhysAddress-物理地址 */ i0wBZ i?
@d~]3T
SNMP_oidcpy(&varBind[1].name, &MIB_ifMACEntAddr); :Ob^b3<t
=>c0NT
+JC"@
'@+q_v@Jl
do Ew{*)r)m
*&Iv Eu
{ /D^ g"
$mKExW
]!^wB 3j
"@^<~bw
/* 提交查询,结果将载入 varBindList。 -Q J8\/1>
*q=\e 9
可以预料这个循环调用的次数和系统中的接口卡数量相等 */ 7J5jf231
eDP&W$s#
ret = 12'MzIsU's
,N,@9p
m_Query(ASN_RFC1157_GETNEXTREQUEST, &varBindList, &errorStatus, 24 [cU
J`0dF<<{[y
&errorIndex); =J)-#|eZG
SC%HHu\l
if (!ret) hM!g6\ w
zj2y=A|Y
ret = 1; !m~r0M7
%pOxt<
else 9#1?Pt^{<
s 7wA3|9
/* 确认正确的返回类型 */ h@*I(ND<
~a2|W|?
ret = SNMP_oidncmp(&varBind[0].name, &MIB_ifEntryType, %hBwc#^
q({-C
MIB_ifEntryType.idLength); Tf!6N<dRXR
}z/%b<o_
if (!ret) { hNYO+LrI)
zQ,M795@EA
j++; I>l^lv&[+
Lz_.m
dtmp = varBind[0].value.asnValue.number; BjPU@rS.U
jf1GYwuW*
printf("Interface #%i type : %in", j, dtmp); PE6,9i0ee
/^jl||'H,:
:oW 16m1`
XSN=0N!GB
/* Type 6 describes ethernet interfaces */ P8h|2,c%
JBHPI@Qt%
if (dtmp == 6) @>$qb|j
O86p]Lr
{ `?[,1
q'y<UyT6
J9tV|0
K/Y"oQ2
/* 确认我们已经在此取得地址 */ ( 1
5c}loOq
ret = }BT0dKx
i9qIaG/
SNMP_oidncmp(&varBind[1].name, &MIB_ifMACEntAddr, l44QB8
9
6A=k;do
MIB_ifMACEntAddr.idLength); xH`
VX-X3
gzvgXZ1q"
if ((!ret) && (varBind[1].value.asnValue.address.stream != NULL)) 1'p=yHw
*'H\`@L
{ m*B4a9f
)f^^hEIS
if((varBind[1].value.asnValue.address.stream[0] == 0x44) tKuJ &I~
~@Bw(!
&& (varBind[1].value.asnValue.address.stream[1] == 0x45) `5(F'o
iT|7**+3
&& (varBind[1].value.asnValue.address.stream[2] == 0x53) sdB(sbSF
|Bi7:w
&& (varBind[1].value.asnValue.address.stream[3] == 0x54) h$9ut@I
.]4MtG
&& (varBind[1].value.asnValue.address.stream[4] == 0x00)) 9a+Y )?z
Hq gg*4#
{ y<nPZ<