# -*- coding: gb2312 -*- 7 H, M& n3 U/ ^9 o. I) K8 P- ]$ [import socket / E I% `! J( g; F; V) Jfrom myutil import *5 v5 i, E" K1 C+ V5 H. l' ~
from binascii import unhexlify as unhex $ M+ a* a' C# r7 F; T& vfrom ctypes import * 5 \4 k6 F) u8 y% N4 b2 S u. q0 Odll = cdll.LoadLibrary('mydll.dll') ! G9 O9 f5 E# i" l1 U# K7 }6 hprint 'begin load mydll..' 9 D/ w5 ?" P0 f" R# p6 B#key 4 I) `0 |) C1 O B; {key='\xF1\xE2\xD3\xC4\xF1\xE2\xD3\xC4' - q$ t2 X& ~! D#output MAC5 L) W# J: W5 F& l( y' L5 S8 g
mac='\x00'*8 7 Y3 F; s& h! t+ b R2 Odata='\x00'*8 1 }8 j. F! o, Q5 v, zpkey=c_char_p()6 s/ r% w+ E# G+ g. T5 z) [, |& Z
pdata=c_char_p() : r0 R. K. S8 ~( I3 b Upmac=c_char_p() 6 f u7 I( d8 z2 C# z. y& {pkey.value=key+ ]8 ]# p# W3 k( H2 Q8 v/ _3 A0 D
pdata.value=data7 p; I! h4 U' j: ^3 k- A0 a2 t; Y! m( J
pmac.value=mac6 O) D2 m$ g. T8 V! ?8 v# a# ]: L
#pack1 ) x7 M/ A) [8 W9 eclass pack: ( i6 l5 y, U7 P" P' E0 m2 a; v pass' \0 ~/ X6 a0 h
pk=pack() 1 s7 m6 m6 |9 A9 d! c% f! p% Npk.len='00000032'$ G) X4 S; X9 ` M' @$ D
pk.ID='0001' ) K6 {/ I/ J3 P; S9 b/ bpk.slnum='00000004' x+ |* C7 m( S+ gpk.poscode='123456781234' & T. h0 f2 \+ s% jpk.rand='1122334455667788') Q" _- T5 D2 ?- }
pk.psam='313233343536' T& z) p2 h+ H' N
pk.kind='0000' + u* R+ F: E/ y6 X6 S- }; q% g" q+ M, ~) [pk.ver='000001' & E& j' T" }1 F; Y) Bpk.time='20140805135601' I+ W/ Z6 R2 W9 w/ t' M1 D! Apk.mac='06cc571e6d96e12d'+ e$ u- O* J ^( Y
) s/ h! l1 Y/ mdata=unhex(pk.len+pk.ID+pk.slnum+pk.poscode+pk.rand+pk.psam+pk.kind+pk.ver+pk.time) 0 x. a! R1 g; c, e" ~#print_hex(data) 5 o$ N* e9 s9 a6 e8 _9 N. a( p- Z; Gpdata.value=data* [/ s+ E" l' I, F2 ?
#cacl MAC $ G( Y" j8 d! e; B# ?/ U0 u+ Fdll.CurCalc_DES_MAC64(805306481,pkey,0,pdata,42,pmac)& n, B2 J" S, x" H- H/ S
stro= pmac.value6 o. u& y& M6 Z) v% g$ j, W+ p
strtemp=''/ o b" O& K3 N5 M% l' {% r6 r
for c in stro:/ c: ~: A3 E1 I2 R2 V
strtemp+="{0:02x}".format(ord(c)) # p+ v- z" C, J( {3 N#print strtemp7 W [& U$ v* u# ]3 S- b
pk.mac=strtemp% R7 @0 Q; [; C' V% s
#data to send - u2 `: D3 a. e5 F* i/ Z. X7 Msd=pk.len+pk.ID+pk.slnum+pk.poscode+pk.rand+pk.psam+pk.kind+pk.ver+pk.time+pk.mac( j$ n+ Q' z: D. a G$ W* b
print 'send1 len is 0x%02x' %(len(sd)/2) , Z0 ^5 O) L( {8 N: z/ v. Cprint sd 8 o! y; c n6 q3 _#pack2% Q/ |) N* Q: I$ r# @
class pack2: L7 L" O2 u/ f3 D+ G4 S4 C; n
pass - e6 V( |# d% Y7 x6 M1 b" spk2=pack2() " {3 v" T) n8 I1 X' Q: J( {, Gpk2.len='0000006E' / v h- B3 A- X+ kpk2.ID='0012' / a( R* r% B2 p; a) Kpk2.slnum='00000005'* V& \# m. H( c6 T2 `+ B {' ^" W/ {: X
pk2.fatCode='00'1 K+ w4 U1 ~& j+ H" ^; a) k! T
pk2.cardASN='0000000000000000'; R1 j, ~- q* `* D- Z# ?+ X1 y
pk2.cardType='00'1 f/ Q7 L1 R3 z, I, \! |) c
pk2.userNO= '0000000000000000' # M/ t" b* ^+ T+ C . x. ]% P4 L" }8 O2 dpk2.fileName1='00000000000000000000000000000015'* V' g7 p8 D/ G# G2 p3 k0 p
pk2.dataLen1='00' 1 J) R0 x' ? x# L8 W6 Jpk2.dataArea1='00000000000000319999990800FB2014080620240806FFFFFFFFFFFFFFFFFFFF'- m; i# K7 o5 w$ r3 W# E
pk2.fileName2='00000000000000000000000000000016' ! L+ h9 w5 d. Y( Q: ?: }. hpk2.dataLen2='00', ]* f1 a% ^7 i/ ]3 C$ I
pk2.dataArea2='000003E800FFFF16' , t% M5 N2 m8 V& J( jpk2.mac='06cc571e6d96e12d'7 F) D2 i7 d. H& J4 `
% V; i- R/ h* a. G5 B4 I' }4 N
data2=unhex(pk2.len+pk2.ID+pk2.slnum+pk2.fatCode+pk2.cardASN+pk2.cardType+pk2.userNO+pk2.fileName1+pk2.dataLen1+pk2.dataArea1+pk2.fileName2+pk2.dataLen2+pk2.dataArea2)2 _1 ?; v# C$ Q
" i u2 M1 q8 m" D
pdata.value=data2( f9 Q8 Q5 V2 `- @7 U: L
#cacl MAC9 V, v# d2 ?* @2 W
dll.CurCalc_DES_MAC64(805306481,pkey,0,pdata,102,pmac): z' L' o7 ~' o5 ^
stro= pmac.value 5 ^1 p, M9 M7 m/ A. Jstrtemp=''6 d' p4 Q* t" z5 B( I9 c
for c in stro: X5 w( T$ ?8 o V r
strtemp+="{0:02x}".format(ord(c)) # w6 D5 Q$ d V Z" J7 b1 b5 t$ J- ]#print strtemp$ A8 r- Z7 H3 Z$ ^$ S& ^
pk2.mac=strtemp 2 N6 H' d. w" \5 N8 Q. S" Q( K#data to send 0 x- M& d" U3 T% w. rsd2=pk2.len+pk2.ID+pk2.slnum+pk2.fatCode+pk2.cardASN+pk2.cardType+pk2.userNO+pk2.fileName1+pk2.dataLen1+pk2.dataArea1+pk2.fileName2+pk2.dataLen2+pk2.dataArea2+pk2.mac: u5 P% }% ?1 s% v
& m) U5 _ G8 z5 R" y$ b" L
print 'send2 len is 0x%02x' %(len(sd2)/2); Y$ h" v9 E1 j; A
print sd2 3 [/ m$ |" n1 c( F4 U8 t3 G9 j O' k+ S: x( a/ D
5 x/ D$ C3 w& F* o0 C#PORT="192.168.60.37" ' s/ |0 o$ n8 Q9 K) ]/ o+ T#PORT="localhost" - D5 G) K7 `* G$ o0 rHOST, PORT = "192.168.51.28", 5800* n }9 U9 `2 m k
# Create a socket (SOCK_STREAM means a TCP socket)$ I Q$ ?( r5 v& X D4 L
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) . a) d1 e. ]2 r# r! atry:4 u" n' b6 P7 g4 A$ G( [1 ?
# Connect to server and send data0 m$ ]' N2 h! \5 J) A
sock.connect((HOST, int(PORT))0 e- z8 ~% n8 j0 p- i E$ `
#data= "123456789", n8 k- Y( B8 a
#s = struct.pack('bbb',1,2,3)1 m( f) s$ L6 |7 E( T( g) ^
sock.send(sd.decode('hex')) & Z) b4 i9 x. r* Y9 c print "Sent1 OK:" 8 l e4 } S% T V z print sd) c6 U1 `4 q9 O8 r* b# s% j* C
# Receive data from the server and shut down + c5 t0 r8 p: c& }" \ received = sock.recv(1024) * F8 e) b- d# L- O, x x( S print "Received:"( D( C: P5 g% u* k& {5 `
print_hex(received), b3 [! [8 X' A
print 'received len is 0x%02x' %(len(received)) 7 @+ c4 G* ~9 @% d0 @6 |7 y1 j print 'received data analysis...'8 q% W) F+ r& q r9 ]
re1=received[0:4] , p) g2 y" d5 B( v' @# n print_hex(re1) 3 A. a: s1 S; Q/ a2 D7 {, X' h re1=received[4:6] - j* N( Y4 T1 X: G/ C print_hex(re1)7 g; Q/ L3 A# y& }) s: z, i
re1=received[6:10] # q+ i" r( X* N0 u3 u8 y print_hex(re1) . I C( G- R8 \4 I! ?% x; C$ K re1=received[10:16] ! l/ D& k- U# {" n& d `& g# j0 i8 {8 [ print_hex(re1)" p/ c, i, S6 s0 A2 D/ a
+ Z+ I5 K9 e' a$ I P6 V #pack2 send $ B1 d' s2 `$ D, Z sock.send(sd2.decode('hex')) # o5 x Z0 A# o' [( v6 c6 o8 a( X print "Sent2 OK:" 5 \1 d' F8 q! h7 k. X, \( q; X print sd2; v0 T/ E! b( M( d6 |. c; x! C
# Receive data from the server and shut down- \* _: D0 l& D, R# e6 J( H/ M. d
received1 = sock.recv(1024)+ Y: J) P- K p* Q2 d
print "Received1:". q7 Q/ Q4 p- j, O. e& V: S
print_hex(received1)8 u2 Y7 R, |. W6 @; L0 T
print 'received1 len is 0x%02x' %(len(received1)) J* x" x U5 [: F! N6 e
- u y) B4 J* z. N2 V* x: V
finally:( A$ H' _" s; @7 c% p) y [
sock.close() k2 e ~& h T$ f2 B; a7 Y$ G
s=raw_input('press any key to continue...') + p: e! V% ~0 _8 I0 B6 D $ i, Z3 E! e/ v b. I" I- d 8 m _8 l! X0 n