79 lines
2.4 KiB
Python
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()
|
|
|
|
|
|
|