Ruby에 대해 많이 알지 못해서이 스크립트의 기능을 이해해야합니다. 나는 그것이 가상 머신을위한 네트워크를 구성하는 규칙을 추가하는 ebtable을 호출한다는 것을 알고있다. 하지만 어떻게 확신 할 수 없습니까? 그래서 분명히 그 맥이 (확실하지 어느 것)을 adresses 패킷을 삭제/또는 그 어딘가에 전달 추출물이 스크립트는 무엇을합니까?
#!/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
}
:
이
코드인가?도움을 주셔서 감사합니다.
Jonas! :) 왜 00과 함께 맥의 마지막 부분을 변경 ?? – Zenet
나를 이겨, 어쩌면 http://en.wikipedia.org/wiki/MAC_address 뭔가 줄 수 있을까요? –