PracticeDev/study_clang/Mimic/Switch_DEMO/udpProxy.py

79 lines
2.4 KiB
Python

from scapy.all import *
import pcappy as pcap
import threading
import multiprocessing
import time
import globalvar as GlobalVar
from icmpProxy import getPortIp
conf.use_pcap = True
proxy_interface = str(GlobalVar.get_proxy_interface())
nos1_interface = str(GlobalVar.get_nos1_interface())
nos2_interface = str(GlobalVar.get_nos2_interface())
nos3_interface = str(GlobalVar.get_nos3_interface())
nos4_interface = str(GlobalVar.get_nos4_interface())
master_nos_interface = str(GlobalVar.get_master_nos_interface())
master_nos_vlan = (GlobalVar.get_master_nos_vlan())
def proxy_udploop():
print 'proxy begin receive udp'
sniff(prn=dealProxyPacket, filter="ether[13]>0x00 and ether[13]<0x15 and ether[28]=0x08 and ether[29]=0x00 and ether[39]=0x11", iface=proxy_interface)
def dealProxyPacket(pkt):
pkt_str = str(pkt)
new_pkt = pkt.__class__(pkt_str[16:])
#print new_pkt.show()
pkt_hex = pkt_str[:16].encode('hex')
ftag = int(int(pkt_hex[26], 16)*16) + int(pkt_hex[27], 16)
sourth_pkt = Ether(src=new_pkt[Ether].src, dst=new_pkt[Ether].dst)/Dot1Q(vlan=int(master_nos_vlan)+ftag)/new_pkt.payload
#print pkt4.show()
sendp(sourth_pkt, count=1, iface=master_nos_interface)
def master_nos_udploop():
ipFilterList = getPortIp()
filterStr = "udp and (ip src " + str(GlobalVar.get_nos_ip())
for i in ipFilterList:
filterStr += " or ip src " + i
filterStr += ")"
print 'master nos begin receive udp'
sniff(prn=dealMasterNosPacket, filter=filterStr, iface=master_nos_interface)
#sniff(prn=dealMasterNosPacket,filter="vlan",iface=master_nos_interface)
def dealMasterNosPacket(pkt):
#print pkt.show()
if int(pkt[Dot1Q].vlan) > int(master_nos_vlan) and int(pkt[Dot1Q].vlan) < (int(master_nos_vlan)+18):
portVlan = (int(pkt[Dot1Q].vlan) - int(master_nos_vlan) + 1000)
pkt[Dot1Q].vlan = portVlan
print pkt.show()
sendp(pkt, count=1, iface=proxy_interface)
def main():
p1 = multiprocessing.Process(target = proxy_udploop)
p1.start()
p2 = multiprocessing.Process(target = master_nos_udploop)
p2.start()
#t2 =threading.Thread(target=proxy_udpploop)
#t2.start()
#t4 =threading.Thread(target=master_nos_udpploop)
#t4.start()
if __name__ == "__main__":
main()