-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathint_paser.py
95 lines (81 loc) · 2.6 KB
/
int_paser.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
from scapy.all import *
import threading
import time
from multiprocessing import Process,Queue
from multiprocessing import Pool
import os,random
runtime=20
#define how long to get the infomation
class INT(Packet):
name="INT"
fields_desc=[ByteField("count",0),
ShortField("routeid",0),
ByteField("swid1",0),
IntField("qtimedelta1",0),
IntField("deqlen1",0),
ByteField("swid2",0),
IntField("qtimedelta2",0),
IntField("deqlen2",0),
ByteField("swid3",0),
IntField("qtimedelta3",0),
IntField("deqlen3",0),
ByteField("swid4",0),
IntField("qtimedelta4",0),
IntField("deqlen4",0),
ByteField("swid5",0),
IntField("qtimedelta5",0),
IntField("deqlen5",0)]
bind_layers(Ether,INT,type=0x801)
bind_layers(INT,IP)
def handle_pkt(pkt,data_info,flag):
count=pkt[INT].count
#normal lize data
switch_data={}
swid_list=[pkt[INT].swid1,pkt[INT].swid2,pkt[INT].swid3,pkt[INT].swid4,pkt[INT].swid5]
deqlen_list=[pkt[INT].deqlen1,pkt[INT].deqlen2,pkt[INT].deqlen3,pkt[INT].deqlen4,pkt[INT].deqlen5]
qtimedelta=[pkt[INT].qtimedelta1,pkt[INT].qtimedelta2,pkt[INT].qtimedelta3,pkt[INT].qtimedelta4,pkt[INT].qtimedelta5]
print "swid:",swid_list
if flag.empty()==True:
for i in range (5):
if qtimedelta[i]>0:
switch_data[swid_list[i]]={"deqlen":deqlen_list[i],"qtimedelta": qtimedelta[i]}
#print int_receive
print "put switch_data in Queue",switch_data
data_info.put(switch_data)
else:
print "reading"
#pkt.show2()
sys.stdout.flush()
def listen(veth,data_info,flag):
sniff(iface = veth, prn = lambda x: handle_pkt(x,data_info,flag))
def read(data_info,flag):
print "processing to read %s" %os.getpid()
while True:
while flag.empty():
time.sleep(runtime)
flag.put("1")
while data_info.empty()==False:
value=data_info.get(True)
print("get from quene",value)
time.sleep(1)
flag.get()
print flag.qsize()
'''
t1=Process(target=listen,args=("s7-int",data_info,flag ))
t2=Process(target=listen,args=("s2-int",data_info,flag))
t3=Process(target=read,args=(data_info,flag))
#t1.setDaemon(True)
#t2.setDaemon(True)
#t3.setDaemon(True)
t1.start()
t2.start()
t3.start()
t1.join()
t2.join()
t3.join()
#time.sleep(60)
print "program end"
t1.terminate()
t2.terminate()
t3.terminate()
'''