# -*- coding: gb2312 -*-( ]8 u a( {8 ?/ q
import socket i1 |3 [6 Q7 c# v7 ~# t' \4 I4 _from myutil import * 7 `5 R7 T ]9 r. |from binascii import unhexlify as unhex9 b, p5 S' Y& O* d8 a$ D
from ctypes import * % b; p, M6 J: ]6 s( Wdll = cdll.LoadLibrary('mydll.dll'): }) s) Q% h9 x7 e9 I' ]" y
print 'begin load mydll..' # p/ n- |* `. w) ?; a) ^#key0 L( q6 u$ K8 I; \$ t
key='\xF1\xE2\xD3\xC4\xF1\xE2\xD3\xC4': U2 Z% u/ e7 G+ J6 T! A& h
#output MAC * m; y( Q# B+ p4 Imac='\x00'*8+ j2 B) z) U7 [5 r" `- K
data='\x00'*8; k$ c) B: M3 Y6 k- ^
pkey=c_char_p() . j4 D* {9 I% mpdata=c_char_p()0 [& x2 k+ ]' N4 _$ j; q5 ~
pmac=c_char_p() ! N0 C- c! x) M' Cpkey.value=key) K# j0 P; l* M% y I6 p- T
pdata.value=data- f+ H4 m9 Z; a1 ^) b% m) @; _
pmac.value=mac9 q; w5 v+ ? r
#pack1 # v# o( @& d" B( jclass pack: z+ S% l# w" J3 z4 F pass , K- W0 f2 x8 ?4 A+ ^pk=pack() + \6 O6 m: J& R+ Q' B! U* qpk.len='00000032' 7 ]; C2 ^, m' j) L: h2 D) Cpk.ID='0001'! h: e' r0 P2 j+ \+ L4 t0 {6 S) e6 ]
pk.slnum='00000004'3 |3 ?9 J7 W0 L: N
pk.poscode='123456781234' 8 X8 M( k" E1 g4 {% Ipk.rand='1122334455667788' 3 Q; R; a/ l, J3 Z# q% d F9 Dpk.psam='313233343536' 0 }6 D6 P/ v+ ^pk.kind='0000' 6 s2 Y7 V& E6 v+ n. |6 ^pk.ver='000001' $ w9 p S2 p7 opk.time='20140805135601'1 W2 q8 I$ Y, @% j# j% X
pk.mac='06cc571e6d96e12d'8 L4 p, q) r. ~6 ^* [
3 s- X9 t3 U& k' q
data=unhex(pk.len+pk.ID+pk.slnum+pk.poscode+pk.rand+pk.psam+pk.kind+pk.ver+pk.time)' s2 a' P' e7 ^" `* {
#print_hex(data)$ n t# D; o7 h9 j y; q* O: ^2 B
pdata.value=data ) F' V; k" c7 q8 g9 `#cacl MAC * a a! e+ k, L) Edll.CurCalc_DES_MAC64(805306481,pkey,0,pdata,42,pmac) , \7 n! x. _% `6 N9 B+ i5 Estro= pmac.value 0 @% u) b) a: {4 Mstrtemp=''3 e2 }3 {+ k2 I* z+ H
for c in stro: 3 l! B; n+ d2 r7 Z" l& J3 `: h# P strtemp+="{0:02x}".format(ord(c)) 0 l+ U' `) p5 n; K2 y#print strtemp * | Y! q% M8 [/ {) upk.mac=strtemp 9 r2 h: {6 Q( a#data to send * D" R: k+ j0 l1 M; H$ \. Lsd=pk.len+pk.ID+pk.slnum+pk.poscode+pk.rand+pk.psam+pk.kind+pk.ver+pk.time+pk.mac7 C3 A; d) ~, P* x8 S, q- @
print 'send1 len is 0x%02x' %(len(sd)/2) 6 U6 M. _, y# j! x0 v! rprint sd 5 t: Q4 A' T0 |3 U& n4 B+ E2 v7 J#pack27 A: R+ x) C) K9 P& k
class pack2: ( ]# o/ p* c% B [2 Y pass) c: {5 {% M) ?. {# _; o/ D
pk2=pack2(), S3 J" t* R7 {- C( A; m
pk2.len='0000006E', _7 ]& h+ Y2 U& r% h( m o6 ^
pk2.ID='0012' 8 R, K, F3 r# I' }6 |6 _/ y' npk2.slnum='00000005'; p ]3 C9 o8 B" ^+ K, c% B
pk2.fatCode='00' 6 @- m1 O; a3 b. s; ppk2.cardASN='0000000000000000' ( `7 _! ]' I( w9 S( Npk2.cardType='00'+ ~1 ` R5 B& ]! {% I8 J5 \! ?
pk2.userNO= '0000000000000000' + n% L/ }: j) K: ? 2 k) ?7 N0 D1 Xpk2.fileName1='00000000000000000000000000000015'; [7 J5 w( F! G) ^3 s
pk2.dataLen1='00'( X% P, s2 T Z, B. s2 r
pk2.dataArea1='00000000000000319999990800FB2014080620240806FFFFFFFFFFFFFFFFFFFF' 7 v9 J: ]9 @/ r5 `+ o9 Y2 upk2.fileName2='00000000000000000000000000000016' 5 M3 G1 z7 I6 |2 g5 {) l3 N+ epk2.dataLen2='00', e8 B9 j( U- `& Z5 p( k/ G
pk2.dataArea2='000003E800FFFF16'/ e8 r$ k3 {' b4 U: u4 U
pk2.mac='06cc571e6d96e12d') R3 V2 V' Y# o# X4 }, {( u
- L `5 ^. n' ?* t* N6 U3 }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). Z, P/ | W3 I; z C
3 ~9 z" X, t; J$ Q6 gpdata.value=data2 H2 z/ G! W8 l1 g/ }; A: f$ c- \
#cacl MAC; x9 R' a S) u
dll.CurCalc_DES_MAC64(805306481,pkey,0,pdata,102,pmac)' u& r7 ]1 e% T
stro= pmac.value% V+ t1 t5 ?: {! H' \% P) D$ {3 g
strtemp='' 7 \( e" Z4 z tfor c in stro: Q. S" M& k. g$ |
strtemp+="{0:02x}".format(ord(c)) ; C+ N L% ]: z#print strtemp 0 l) i6 c9 L5 Z- ?* E# b A {pk2.mac=strtemp+ Y6 E) v7 h$ s/ k" \& V; L/ @
#data to send1 H7 Q( y" s4 Y
sd2=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 ! D; T) l! P, u" w$ f/ [8 Q4 R5 i8 y6 V1 v9 x- `
print 'send2 len is 0x%02x' %(len(sd2)/2)) }) S. }. x2 }" }! ]
print sd2 * Y0 s% O( e2 }. w- S& P ; t4 v* P/ D% }' j2 l2 Y) k V) {- j% Y1 L/ k( v#PORT="192.168.60.37"' @* R7 l) g6 I4 @/ \5 [$ f
#PORT="localhost" 7 [ T( ~6 t$ O2 P0 eHOST, PORT = "192.168.51.28", 58000 C) l$ G2 [8 ]; T" J9 o- f2 j
# Create a socket (SOCK_STREAM means a TCP socket) * c4 D1 u$ e7 q5 g( Z; \6 Ssock = socket.socket(socket.AF_INET, socket.SOCK_STREAM). f- q5 }0 d- N8 y" T
try:0 [* W' b) I* w
# Connect to server and send data 0 E3 `, r* i9 [9 P; P sock.connect((HOST, int(PORT))) \$ ~8 \$ J7 j- s
#data= "123456789" / S6 N8 x5 S* l; S2 t- \* Z/ P #s = struct.pack('bbb',1,2,3) 9 ?: H7 U8 m8 T sock.send(sd.decode('hex')) - O! Z) x* k' d- f( ^ print "Sent1 OK:"3 c) V- E4 ~6 U. D: h
print sd7 R4 F; y. p3 h" `$ X
# Receive data from the server and shut down4 g- `4 Q/ f9 O+ o- E/ O
received = sock.recv(1024) 2 m# E" N7 \0 u2 l7 Q9 G8 E% Y+ I print "Received:" ( g+ z a- v% _) ~- j) y+ e6 @$ } print_hex(received)9 Z/ g- Q/ \0 s$ A( i
print 'received len is 0x%02x' %(len(received))0 M. g/ k, C2 ^! ] v
print 'received data analysis...' 5 A) P; P1 W6 [% |+ n/ W6 N re1=received[0:4]8 T+ u$ Y" Y) m- X5 z
print_hex(re1)% c' Y4 b+ A6 l( ]7 F
re1=received[4:6]; N. o; j3 j: _1 B$ H
print_hex(re1)# A! u! } N* n" b$ ^/ r
re1=received[6:10]3 H. i& N1 l9 B
print_hex(re1)5 q9 |! z. z% g0 D5 G$ H* u
re1=received[10:16]- _: m+ {$ o4 @6 H8 B
print_hex(re1) : h" N) W6 i/ w% Q! w ) [# O6 q$ u7 M; P& W #pack2 send f! e; Q: d2 W3 X
sock.send(sd2.decode('hex')) : \! O/ X, ]* [9 g& E3 W print "Sent2 OK:", a# U2 [+ r% R2 E0 B2 D3 k
print sd2 ! \) z. i6 P0 S8 E. ]+ Y # Receive data from the server and shut down' m4 g2 J( F5 J# f- l- e% D
received1 = sock.recv(1024) * U7 {% w- ?: \ print "Received1:". W! t9 [# j' P: O' Z Y
print_hex(received1) ! W3 y% U2 n8 r0 d9 b print 'received1 len is 0x%02x' %(len(received1)) 0 x/ t2 C! ]$ B% ]* K& m ^ / g" H, J- @& Y! s) L8 ifinally:9 }# [3 e0 |- c; F- E
sock.close(). g H/ l5 V2 X. h
* j5 [/ h; L3 c# u8 [) b
s=raw_input('press any key to continue...') 0 o9 g7 S ?2 ~: m) c8 W' a 9 a0 Q0 G; J0 I+ V' W , F8 [9 ^; ?- K; V5 \/ [