- 在线时间
- 479 小时
- 最后登录
- 2026-4-17
- 注册时间
- 2023-7-11
- 听众数
- 4
- 收听数
- 0
- 能力
- 0 分
- 体力
- 7790 点
- 威望
- 0 点
- 阅读权限
- 255
- 积分
- 2923
- 相册
- 0
- 日志
- 0
- 记录
- 0
- 帖子
- 1171
- 主题
- 1186
- 精华
- 0
- 分享
- 0
- 好友
- 1
该用户从未签到
 |
# -*- coding: gb2312 -*-
: s; O5 C" y0 R; \import socket0 R* [* D0 Q' u3 x# A9 v/ F. R$ K- A
from myutil import *" f0 ~; o7 J: ]5 {$ G' K: b
from binascii import unhexlify as unhex- u1 r2 ~, c6 x% |/ d8 ?7 \+ x
from ctypes import *+ Q' c8 E; r& ^9 }
dll = cdll.LoadLibrary('mydll.dll')
8 Y' _! e7 m% S8 E4 E D) p: }2 ~- cprint 'begin load mydll..'
, @$ X& ]$ R' W4 P' e#key/ {/ m- i0 p0 m/ L
key='\xF1\xE2\xD3\xC4\xF1\xE2\xD3\xC4'3 n% M$ y1 w' m9 i; u) F6 i2 h& `* {
#output MAC
& `) e( t6 Q. pmac='\x00'*8( N n8 {/ o0 k8 L) ~- _
data='\x00'*8, C' P% y; {8 j- m6 e! J; r3 f
pkey=c_char_p()/ P( F: _4 A6 v8 p- {- i$ n
pdata=c_char_p()
, Q$ `7 C( ?5 p7 mpmac=c_char_p()
H. u* N! O0 ?5 R, T2 `pkey.value=key6 L1 M& D& ?3 P# m/ J4 l/ Q
pdata.value=data, J9 Y& M1 E# k' {. B2 W
pmac.value=mac
) k% D- D6 G8 d#pack1
6 \5 ?1 _6 }0 W7 D' W2 Fclass pack:
* U7 U l q0 r* Y8 j/ k pass K k" @8 @ o$ a
pk=pack()2 a! u$ s8 z- p/ e
pk.len='00000032'
; b! m+ }( U) S) c7 @4 n5 v: d9 F9 v, ppk.ID='0001'
# S1 ?; I3 E; E& C: |pk.slnum='00000004'
u( t# C* v+ Fpk.poscode='123456781234', Y- v; _! P1 P$ U, e* \
pk.rand='1122334455667788'
9 Y( f2 h5 q" z, H: Kpk.psam='313233343536'* h) l2 u, G6 J' _
pk.kind='0000'1 Z1 ]6 R) z: ]" R; f
pk.ver='000001'
+ ]7 e2 [* B4 G) t% m& [pk.time='20140805135601'
$ D3 a0 }7 E/ W8 U3 Ppk.mac='06cc571e6d96e12d') d: y+ p+ ?: u9 J; u' }5 n. _3 g
# j$ S& R u5 v# p
data=unhex(pk.len+pk.ID+pk.slnum+pk.poscode+pk.rand+pk.psam+pk.kind+pk.ver+pk.time)/ z$ J" t5 ?1 M0 s* |
#print_hex(data)
* c6 c* d1 ^2 d% Rpdata.value=data
" V# p \$ ~3 Z) x) D2 q2 ~; g#cacl MAC1 w) G% N8 A; j7 _ Q
dll.CurCalc_DES_MAC64(805306481,pkey,0,pdata,42,pmac)
' F q: X3 ^8 E9 sstro= pmac.value3 [8 \; ^- V. u( l( j
strtemp=''! [8 B1 h: e$ v( P D2 Q! L
for c in stro:$ g- w7 A+ l4 U) `4 K
strtemp+="{0:02x}".format(ord(c))
. B+ M5 r0 K$ ~#print strtemp" i7 ^, ?" I' ^% ?) r
pk.mac=strtemp0 @! ^0 e+ | ]( {
#data to send
( M) h$ r' J" [/ b) ?sd=pk.len+pk.ID+pk.slnum+pk.poscode+pk.rand+pk.psam+pk.kind+pk.ver+pk.time+pk.mac
}& ?$ { r) U9 X- d* o& l6 Gprint 'send1 len is 0x%02x' %(len(sd)/2)* o4 n' u/ w A5 @
print sd
$ L" L% q) R) ~& e/ j9 \& i( b#pack2
A) h; ]" z7 n G; iclass pack2:
! l5 S% ]0 J7 F, O) l, m- k pass
* {( F H& F9 l( b9 ]$ Dpk2=pack2()5 \6 M9 F" A& _9 w. ]4 ~
pk2.len='0000006E'
# `1 m9 l! [$ S: d- z: b- Mpk2.ID='0012'3 [" ]% v+ h& g' t' ~
pk2.slnum='00000005'8 V3 I% x+ V1 Y2 d0 O2 i2 Q
pk2.fatCode='00'% @- V) J& y. H; q7 N+ t: S# Y
pk2.cardASN='0000000000000000'
+ E: c$ L" z* P& W: Y2 N, H9 Kpk2.cardType='00'' x! M$ w+ i8 E5 m- H
pk2.userNO= '0000000000000000'0 b( Y/ t) J+ j0 E( |2 W- F
, H: Y' v \9 v( y4 o& z
pk2.fileName1='00000000000000000000000000000015', G2 P* s7 W3 A
pk2.dataLen1='00'- B: v, t5 G6 H) N* b
pk2.dataArea1='00000000000000319999990800FB2014080620240806FFFFFFFFFFFFFFFFFFFF'& E- e$ I3 B" m, U- {
pk2.fileName2='00000000000000000000000000000016'/ K7 J: J9 _5 N- O H
pk2.dataLen2='00'. X2 }. S- D. d
pk2.dataArea2='000003E800FFFF16'
. x4 n) X* m) R8 Dpk2.mac='06cc571e6d96e12d', d/ o: t: f# Q0 I6 ?4 x
~! ]% v/ L) T. }; z# idata2=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)
) V( E+ i" ]6 N# O% ^) i+ h7 j- y( I: l* d3 O$ J
pdata.value=data2- y2 h' H4 k8 ]2 r, ]
#cacl MAC
8 |1 @4 Z/ S- s8 }% Tdll.CurCalc_DES_MAC64(805306481,pkey,0,pdata,102,pmac)
, z: d3 R4 i. i; `stro= pmac.value
% a" X9 Y, z4 b& dstrtemp=''
- v1 N+ G+ p" W7 |; U: sfor c in stro:- K' ~( _5 K' V- g+ i
strtemp+="{0:02x}".format(ord(c))
! i; Y5 A: K$ N4 f" H1 N/ j k#print strtemp. W1 E4 c& [6 G, K
pk2.mac=strtemp
% F0 n) U Y8 a# u#data to send: V9 d3 t+ M& t- Q/ M# }
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# ^0 ^/ y0 k/ ]9 U+ ^ }
5 R% l8 o# S* a8 t
print 'send2 len is 0x%02x' %(len(sd2)/2)! X% y5 @: }0 E. [0 w v
print sd2
6 }& Y3 X6 Q8 Z5 f! H2 L8 @- u* k; {& N3 n4 J: m2 z8 S. g; x' T& f
# z7 T6 o/ D+ t4 O, @) y/ i) _#PORT="192.168.60.37"
$ _2 |% I8 r" Z8 ~) E0 S7 ]#PORT="localhost"" }2 |; J g* ~; p/ P6 P
HOST, PORT = "192.168.51.28", 5800% n( F; i4 n9 m
# Create a socket (SOCK_STREAM means a TCP socket)
$ i" }: [! H" h" V1 fsock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# ~' F! t* E. |. s2 etry:
( |/ D. ]1 y2 I* G # Connect to server and send data
- G$ Y+ g* B V& w2 u sock.connect((HOST, int(PORT)); l* y: }* i$ d# e R
#data= "123456789"
+ \$ v C5 W( l2 K. i( c8 C0 l5 s #s = struct.pack('bbb',1,2,3)
, ^6 a" i- G9 }6 s6 S# { sock.send(sd.decode('hex'))* O& l' L% C9 ?& ~
print "Sent1 OK:"7 ^' V# g" t; T; i- F- n8 u
print sd
$ d6 G" `) z* t # Receive data from the server and shut down5 v5 M1 ]# ^4 w/ h0 U6 [, v
received = sock.recv(1024)
a) N" X' k0 n& I% c& [ print "Received:"
* b5 H+ o; t( A9 ^- X print_hex(received)" d( q# l; J( @* e
print 'received len is 0x%02x' %(len(received))5 n( P1 y; y) j6 H/ l8 c ?
print 'received data analysis...'
6 |3 \8 ~5 @1 t re1=received[0:4] Q6 X5 @ [# y4 n, u* V
print_hex(re1)! N8 W" r8 f, V
re1=received[4:6]! t; w: A+ O- e; P0 C
print_hex(re1) G2 I- s& @% U- I: h7 ]
re1=received[6:10]
1 T- [) F& ^7 Y8 v( n print_hex(re1)6 }5 x' ^# e+ l9 X- u
re1=received[10:16] e% w& p6 [4 x3 o3 t8 u5 |9 _
print_hex(re1)
% W7 ~. |: l* W/ F
a9 d+ ]% H# P; _, x) p% ` #pack2 send
" S5 w9 ~& n' m sock.send(sd2.decode('hex'))8 s; C& V8 L* b- b3 q3 Q$ M- J) _
print "Sent2 OK:"
, ?2 q& N8 N+ } print sd2
$ W) a, \6 ]5 x8 m/ u # Receive data from the server and shut down
4 S! r+ j9 {" ~0 k: f0 Y- ]- `! u received1 = sock.recv(1024)' d& L/ J5 Z1 `% |
print "Received1:"1 n, J& v4 x) j. e8 I! K
print_hex(received1)
& w# A7 p5 X4 C6 T- l) O, \ print 'received1 len is 0x%02x' %(len(received1))/ m ]2 _$ E1 I# R$ W& P2 t; ]
/ h: _ @' \! A i, M* f
finally:
+ D: B- B4 W0 j sock.close()% l8 I+ x* ]& A$ ` i
' `' ~5 ]. [7 L, I1 A6 n4 Y
s=raw_input('press any key to continue...')
Q) P4 Z: g1 d( y7 o1 I) Q/ c: O9 k6 W* ~* U
u6 F2 J; R) |- M
|
zan
|