Beispiel #1
0
def send_msg(kwargs): 
    if type(kwargs) is not types.DictType:   #这个格式判断可以学习一下。虽然在这个程序里没什么用。
        return  
    #源ip地址,如果字典里没添,就获取真实地址 
    src_ip=inet_aton(kwargs.get('src', socket.gethostbyname(socket.gethostname())))  
    #目的ip地址  
    dst_ip=inet_aton(kwargs.get('dst'))
    #源mac地址,如果字典里没添,就获取真实mac地址
    src_mac=pack_mac(kwargs.get('src_mac',get_local_mac()))
    #目的mac地址  
    dst_mac=pack_mac(kwargs.get('dst_mac')) 
    
    host=kwargs.get('host',socket.gethostname())  
    user=kwargs.get('user')  
    msg=kwargs.get('msg')  


    #288表示发送信息
    #msg="1_lbt2_2#0#002564CA9C71#0#0#0:%s:%s:%s:288:%s" %(int(strftime('%m%d%H%M%S'))+100000000, user, host, msg)   #应用层的数据
    msg="1_lbt2_2#0#002564CA9C71#0#0#0:%s:%s:%s:209:%s" %(int(strftime('%m%d%H%M%S'))+100000000, user, host, msg)   #应用层的数据
    
    msg=msg.decode('utf-8').encode("gb2312")

    udp=dpkt.udp.UDP(dport=2425, sport=2425)  
    udp.data+=msg  	#传输层的数据
    udp.ulen=len(udp)  
      
    ip = dpkt.ip.IP(src=src_ip, dst=dst_ip, data=udp, p=dpkt.ip.IP_PROTO_UDP) 	#网络层的数据
   
    ip.len=len(ip)  #重新计算ip的长度,不然消息发送不出去  


    ether = dpkt.ethernet.Ethernet(  	#数据链路层的以太网帧
        dst = dst_mac,
        src = src_mac,  
        type = 0x0800,  
        data = ip  
    )
    device=sendpkt.findalldevs()[0]
    sendpkt.sendpacket(str(ether), device)  # 直接利用网卡。整个数据帧都是我构造的。
Beispiel #2
0
def send_msg(kwargs):
    local_ip=inet_aton(kwargs['src'])
    remote_ip=inet_aton(kwargs['dst'])
    local_mac=pack_mac(kwargs['src_mac'])
    #判断remote_ip和local_ip是否在同一个网段
    remote_mac=pack_mac(kwargs['dst_mac'])\
            if trans(kwargs['src'])==trans(kwargs['dst']) else pack_mac(MASK_MAC)
    host=kwargs['host']
    user=kwargs['user']
    msg=kwargs['msg']
    
    device=sendpkt.findalldevs()[0]  
    #飞鸽监听本地的UDP 2425端口   
    udp=dpkt.udp.UDP(dport=2425,sport=2425)
    #向飞鸽发送消息命令字
    #6291458表示下线
    #6291457表示上线
    #288表示发送信息
    msg="1_lbt4_10#65664#%s#0#0#0:%s:%s:%s:288:%s" \
        %(kwargs['src_mac'].replace('-',''),int(strftime('%m%d%H%M%S'))+1000000000,user,host,msg)
    
    msg=msg.encode("gbk")
    udp.data+=msg
    udp.ulen=len(udp)
    
    ip=dpkt.ip.IP(src=local_ip,dst=remote_ip,data=udp,p=dpkt.ip.IP_PROTO_UDP)
    #重新计算ip的长度,不然消息发送不出去
    ip.len=len(ip)
    
    ether=dpkt.ethernet.Ethernet(
        dst=remote_mac,
        src=local_mac,
        type=0x0800,
        data=ip
    )
    sendpkt.sendpacket(str(ether),device)
Beispiel #3
0
 def test_sendpacket_typeerror(self):
     """尝试其他类型的参数以产生类型异常"""
     try:
         sendpkt.sendpacket(25)
     except TypeError, e:
         pass
Beispiel #4
0
 def test_call_sendpacket_keyword(self):
     """尝试以关键字方式传递包"""
     sendpkt.sendpacket(packet=self.packet, device=self.device)
     return
Beispiel #5
0
 def test_call_sendpacket(self):
     """尝试调用一下sendpacket函数"""
     sendpkt.sendpacket(self.packet, self.device)
     return
Beispiel #6
0
 def test_sendpacket_typeerror(self):
     """尝试其他类型的参数以产生类型异常"""
     try:
         sendpkt.sendpacket(25)
     except TypeError, e:
         pass
Beispiel #7
0
 def test_call_sendpacket_keyword(self):
     """尝试以关键字方式传递包"""
     sendpkt.sendpacket(packet=self.packet, device=self.device)
     return
Beispiel #8
0
 def test_call_sendpacket(self):
     """尝试调用一下sendpacket函数"""
     sendpkt.sendpacket(self.packet, self.device)
     return
Beispiel #9
0
        while self.looping:
            tm, pkt = self.pc.next()
            pkt = str(pkt)
            if self.filterpacket(pkt):
                self.pktqueue.put(pkt)
        return

    def filterpacket(self, pkt):
        return True

    def stop(self):
        self.looping = False
        return


sendpacket = lambda pkt: sendpkt.sendpacket(pkt, settings.ETHIF)

###############################################################################
import unittest
import Queue
import time


class TestCapThread(unittest.TestCase):
    def setUp(self):
        return

    def tearDown(self):
        return

    def testall_1(self):
Beispiel #10
0
    def run(self):
        while self.looping:
            tm,pkt=self.pc.next()
            pkt=str(pkt)
            if self.filterpacket(pkt):
                self.pktqueue.put(pkt)
        return

    def filterpacket(self,pkt):
        return True

    def stop(self):
        self.looping=False
        return

sendpacket=lambda pkt:sendpkt.sendpacket(pkt,settings.ETHIF)

###############################################################################
import unittest
import Queue
import time

class TestCapThread(unittest.TestCase):

    def setUp(self):
        return

    def tearDown(self):
        return

    def testall_1(self):