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()