Je ne connais pas beaucoup Ruby et j'ai besoin de comprendre ce que fait ce script. Je sais qu'il appelle ebtables pour ajouter des règles qui configurent les réseaux pour les machines virtuelles. Mais je ne suis pas sûr de comment?que fait ce script?
Voici le code:
#!/usr/bin/env ruby
require 'pp'
require 'rexml/document'
VM_NAME=ARGV[0]
# Uncomment to act only on the listed bridges.
#FILTERED_BRIDGES = ['beth0']
def activate(rule)
system "sudo ebtables -A #{rule}"
end
def get_bridges
bridges = Hash.new
brctl_exit=`brctl show`
cur_bridge = ""
brctl_exit.split("\n")[1..-1].each do |l|
l = l.split
if l.length > 1
cur_bridge = l[0]
bridges[cur_bridge] = Array.new
bridges[cur_bridge] << l[3]
else
bridges[cur_bridge] << l[0]
end
end
bridges
end
def get_interfaces
bridges = get_bridges
if defined? FILTERED_BRIDGES
FILTERED_BRIDGES.collect {|k,v| bridges[k]}.flatten
else
bridges.values.flatten
end
end
nets=`virsh -c qemu:///system dumpxml #{VM_NAME}`
doc=REXML::Document.new(nets).root
interfaces = get_interfaces()
doc.elements.each('/domain/devices/interface') {|net|
tap=net.elements['target'].attributes['dev']
if interfaces.include? tap
iface_mac=net.elements['mac'].attributes['address']
mac=iface_mac.split(':')
mac[-1]='00'
net_mac=mac.join(':')
in_rule="FORWARD -s ! #{net_mac}/ff:ff:ff:ff:ff:00 -o #{tap} -j DROP"
out_rule="FORWARD -s ! #{iface_mac} -i #{tap} -j DROP"
activate(in_rule)
activate(out_rule)
end
}
donc apparemment extraits mac (non adresses sûr) et les gouttes paquet/ou les transmet quelque part?
Merci beaucoup pour votre aide!
merci beaucoup Jonas! :) pourquoi changer la dernière partie du mac avec 00 ?? – Zenet
Beats moi, peut-être http://en.wikipedia.org/wiki/MAC_address pourrait donner quelque chose? –