def del_arp(self, ip): """Установить соответствие mac-ip в системной ARP-таблице""" if not self.ip: raise RuntimeError("MacAssoc.ip must be set first") arp = dnet.arp() _ip = dnet.addr(self.ip) deleted = arp.delete(_ip) return deleted
def set_arp(self): """Установить соответствие mac-ip в системной ARP-таблице""" if not self.mac: raise RuntimeError("MacAssoc.mac must be set first") if not self.ip: raise RuntimeError("MacAssoc.ip must be set first") arp = dnet.arp() _ip = dnet.addr(self.ip) _mac = dnet.addr(self.mac) added = arp.add(_ip, _mac) return added
def on_add_button_clicked(self, data): dialog = gtk.MessageDialog( self.parent.window, gtk.DIALOG_MODAL | gtk.DIALOG_DESTROY_WITH_PARENT, gtk.MESSAGE_QUESTION, gtk.BUTTONS_OK_CANCEL, "Enter IP Address to add:") entry = gtk.Entry(0) dialog.vbox.pack_start(entry) entry.show() ret = dialog.run() dialog.destroy() if ret == gtk.RESPONSE_OK: try: peer = entry.get_text() arp = dnet.arp() mac = arp.get(dnet.addr(peer)) if not mac: raise Exception("Unable to get mac address") self.add_peer(mac.data, dnet.ip_aton(peer), int(self.as_spinbutton.get_value())) except Exception, e: self.log("EIGRP: Cant add peer %s: %s" % (peer, e))
def on_add_button_clicked(self, data): dialog = gtk.MessageDialog( self.parent.window, gtk.DIALOG_MODAL | gtk.DIALOG_DESTROY_WITH_PARENT, gtk.MESSAGE_QUESTION, gtk.BUTTONS_OK_CANCEL, "Enter IP Address to add:", ) entry = gtk.Entry(0) dialog.vbox.pack_start(entry) entry.show() ret = dialog.run() dialog.destroy() if ret == gtk.RESPONSE_OK: try: peer = entry.get_text() arp = dnet.arp() mac = arp.get(dnet.addr(peer)) if not mac: raise Exception("Unable to get mac address") self.add_peer(mac.data, dnet.ip_aton(peer), int(self.as_spinbutton.get_value())) except Exception, e: self.log("EIGRP: Cant add peer %s: %s" % (peer, e))
def setUp(self): self.arp = dnet.arp() self.failUnless(self.arp, "couldn't open ARP handle")
def getmac(theaddr): return dnet.arp().get(dnet.addr(theaddr))
def arptable(self): """Получить соответствия mac-ip из ARP таблицы""" arp = dnet.arp() def add_entry((pa, ha), arg): arg[str(pa)] = str(ha).upper()
parser.add_argument('--mac', default='F4:6D:04:11:22:33') parser.add_argument('--ip', default='192.168.1.46') parser.add_argument('--port', default='9029') parser.add_argument('--reset', default=3) args = parser.parse_args() print "Using the following parameters:" print "filename :", args.filename print "address :", args.address print "mac :", args.mac print "ip :", args.ip print "port :", args.port print "reset :", args.reset # Setup ARP (this requires root privilege) arp = dnet.arp() pa = dnet.addr(args.ip) ha = dnet.addr(args.mac) arp.add(pa, ha) input_file = open(args.filename, "rb") data = input_file.read() input_file.close() print "file length =", len(data) assert len(data) == 4096 addr_lo = int(args.address, 16) & 0xFF addr_hi = int(args.address, 16) / 256
def gen_probes_raw(): """ Pre-generate raw Ethernet packets and store these in the array pkts. """ from dpkt.ethernet import Ethernet from dpkt.ip import IP from dpkt.icmp import ICMP eth_info = dnet.intf().get_dst(options.net_info['ip_dst']) options.net_info['l2_src'] = eth_info['link_addr'].eth gw = dnet.route().get(options.net_info['ip_dst']) if gw: options.net_info['l2_dst'] = dnet.arp().get(gw).eth else: # destination is in the same subnet options.net_info['l2_dst'] = dnet.arp().get(options.net_info['ip_dst']).eth try: icmp_data = ICMP(type=8, data=ICMP.Echo(seq=0, id=0,data = 'H'*(options.plen-ICMP_HDR_LEN-IP_HDR_LEN))) ip_data = IP(src=options.net_info['ip_src'].ip, dst=options.net_info['ip_dst'].ip, p=1, data=icmp_data) ip_data.len += len(ip_data.data) p0 = Ethernet(src=options.net_info['l2_src'], dst=options.net_info['l2_dst'], data=ip_data) str_p = str(p0) hdr = str_p[:ETHER_HDR_LEN+IP_HDR_LEN] pkt = str_p[ETHER_HDR_LEN+IP_HDR_LEN:] psize = options.plen + ETHER_HDR_LEN # packet and format p = [ hdr, pkt[:2], struct.pack('<H', (0)), # p[2] = ICMP checksum pkt[4:16], struct.pack('!L', (0) % 0xFFFFFFFF), # p[4] = sequence number (4 bytes) struct.pack('!L', (0) % 0xFFFFFFFF), # p[5] = slot number (4 bytes) pkt[16+4+4:]] # payload ck = checksum(''.join(p[1:])) & 0xFFFF # calculate initial ICMP cksum p[2] = struct.pack('H', (ck)) # update ICMP cksum M_ = sum(struct.unpack('HHHH',''.join(p[4:6]))) j = 0 for i in xrange(options.pnum): j=long(slottimes[i]) p[4] = struct.pack('!L', (i) % 0xFFFFFFFF) # increment 4 byte seq ID in ICMP payload p[5] = struct.pack('!L', (j) % 0xFFFFFFFF) # increment 4 byte slot ID in ICMP payload M = sum(struct.unpack('HHHH', ''.join(p[4:6]))) ck = ck + M_ - M p[2] = struct.pack('H', (ck) % 0xFFFF) # update ICMP cksum pkts[i] = ''.join(p)[:PKT_ARRAY_WIDTH] # only store first 100 packet bytes M_=M except (MemoryError, ValueError): ERROR("Not enough memory!",2) except KeyboardInterrupt: print 'terminated by user.' raise SystemExit(-1) print 'done.' try: po = pcap.pcap(options.net_info['eth']) return po except Exception as e: print e
def setUp(self): self.arp = dnet.arp() self.assertTrue(self.arp, "couldn't open ARP handle")