set -x
downlink=2000
dev=eth1
mod_command=modprobe
setup() {
echo " loading modules"
for module in ifb sch_sfq sch_htb sch_ingress act_mirred xt_mark cls_u32 cls_fw;
do
if lsmod|grep $module 2>&1 >/dev/null; then
echo "already loaded";
else
$mod_command $module;
fi
done
echo "outgoing device" $dev
}
download() {
ip link set dev $indev up
tc qdisc add dev $dev handle ffff: ingress
tc filter add dev $dev parent ffff: protocol ip prio 1 \
u32 match u32 0 0 action mirred egress redirect dev $indev
tc qdisc add dev $indev root handle 1: hfsc default 30
tc class add dev $indev parent 1: classid 1:1 hfsc sc rate ${downlink}kbit ul rate ${downlink}kbit
tc class add dev $indev parent 1:1 classid 1:20 hfsc sc rate $((2*$downlink/10))kbit ls rate $((5*$downlink/10))kbit
tc class add dev $indev parent 1:1 classid 1:30 hfsc sc rate $((8*$downlink/10))kbit ls rate $((5*$downlink/10))kbit
}
download_filters() {
#match scp
tc filter add dev $indev parent 1:0 protocol ip u32 \
match ip sport 22 0xffff flowid 1:20
#league of legends ports
target="1:20"
tc filter add dev $indev parent 1:0 protocol ip u32 match ip sport 5000 0xfff8 flowid $target
tc filter add dev $indev parent 1:0 protocol ip u32 match ip sport 5008 0xfff0 flowid $target
tc filter add dev $indev parent 1:0 protocol ip u32 match ip sport 5024 0xffe0 flowid $target
tc filter add dev $indev parent 1:0 protocol ip u32 match ip sport 5056 0xffc0 flowid $target
tc filter add dev $indev parent 1:0 protocol ip u32 match ip sport 5120 0xff00 flowid $target
tc filter add dev $indev parent 1:0 protocol ip u32 match ip sport 5376 0xffc0 flowid $target
tc filter add dev $indev parent 1:0 protocol ip u32 match ip sport 5440 0xffe0 flowid $target
tc filter add dev $indev parent 1:0 protocol ip u32 match ip sport 5472 0xfff0 flowid $target
tc filter add dev $indev parent 1:0 protocol ip u32 match ip sport 5488 0xfff8 flowid $target
tc filter add dev $indev parent 1:0 protocol ip u32 match ip sport 5496 0xfffc flowid $target
tc filter add dev $indev parent 1:0 protocol ip u32 match ip sport 5500 0xffff flowid $target
}
start() {
stop
setup
download
download_filters
}
stop() {
echo " stop()"
tc qdisc del dev $dev root 2> /dev/null > /dev/null
tc qdisc del dev $dev ingress 2> /dev/null > /dev/null
tc qdisc del dev $indev root 2> /dev/null > /dev/null
tc qdisc del dev $indev ingress 2> /dev/null > /dev/null
}
restart() {
stop
sleep 1
start
}
case "$1" in
start)
start
;;
stop)
stop
;;
restart)
restart
;;
setup)
setup
;;
*)
pwd=$(pwd)
echo "Usage: test-ts.sh {start|stop|restart}"
;;
esac
exit 0
#script that calculates various times between packets
import scapy.all as scapy
import sys
packets = scapy.rdpcap("tmp/lol.pcap")
'''
time between client and next server packet
'''
def timeBetweenClientAndServer():
#first packet from client
startTime = packets[0].getlayer("IP").time
#we start with a client packets time and look for the next server packet
client = False
server = True
for x in range(1,len(packets)):
p = packets[x]
if client:
if p.getlayer("UDP").sport != 5106:
#this is a packet from the client
startTime = p.getlayer("IP").time
server = True
client = False
if server:
if p.getlayer("UDP").sport == 5106:
#this is a packet from the server
time = p.getlayer("IP").time
print "time between client and server packet: %.6f " % (time - startTime)
server = False
client = True
'''
time between packets from server:
'''
def timeBetweenPacketsFromServer():
#packet[2] is network packet 3, first packet with data from server
startTime = packets[2].getlayer("IP").time
for x in range(3,len(packets)):
p = packets[x]
if p.getlayer("UDP").sport == 5106:
#print "packet number: ", x+1
#this is a packet from my client
time = p.getlayer("IP").time
#print "p.getlayer(IP).time , startTime %.6f : %.6f: " % (p.getlayer("IP").time, startTime)
timeNew = time - startTime
print "server: %.6f" % timeNew
startTime = time
'''
time between packets from client:
'''
def timeBetweenPacketsFromClient():
#packets[0] is the first client packet
startTime = packets[0].getlayer("IP").time
for x in range(1,len(packets)):
p = packets[x]
if p.getlayer("UDP").sport != 5106:
#print "packet number: ", x+1
#this is a packet from my client
time = p.getlayer("IP").time
print "p.getlayer(IP).time , startTime %.6f : %.6f: " % (p.getlayer("IP").time, startTime)
timeNew = time - startTime
print "client: %.6f" % timeNew
startTime = time
if __name__ == '__main__':
timeBetweenClientAndServer()
#timeBetweenPacketsFromServer()
#timeBetweenPacketsFromClient()