dir="${dir//+(\/)//}"
использует ${PARAMETER/PATTERN/STRING}
расширение. Разрушение его в этом случае (использующий синтаксис, напоминающий о Perl /x
модификатор regex, не допустимый синтаксис Bash):
${ # start expansion
dir # the parameter being expanded
/ # separates parameter from pattern
/ # double slash means replace all instead of replace first
+(\/) # the pattern we're looking for
/ # separates pattern from replacement
/ # the replacement text
} # end expansion
С extglob
включенный, +(PATTERN)
средства одни или несколько случаев ШАБЛОНА. Шаблон \/
соответствует наклонной черте (обратная косая черта должна указать, что это не наклонная черта, которая разделяет шаблон и текст замены), таким образом, +(\/)
соответствия один или несколько /
персонажи.
Вы могли сделать так путем контроля журнала связывать-сервера (вход запроса должен быть включен).Удачи...
Никакие такие вещи как события не реализованы в, связывают, этому не нужно это.
Вы могли осмотреть применимые брандмауэры, кто используется в некоторых организациях для ограничения доступа к некоторым пользователям. Там у Вас было бы больше возможностей достижения, что Вы хотите.
Установка маршрутов кажется хорошей идеей также в цели, с чем Вы хотите достичь, связывают, и инициированное выполнение сценария будет неэффективно также: Вы имеете к:
for each dest IP
look up through your database
if match set the route
then the OS will see and use the root
Установка загрузок маршрутов не является проблемой и не будет влиять на производительность значимым способом. Сколько маршрутов Вы думаете, что корпоративные маршрутизаторы имеют? сотни? не совсем... И у них не обязательно есть необычная аппаратная конфигурация. Серьезно, Вы в порядке, серьезные операционные системы специально предназначены, чтобы обработать много маршрутов и оптимизировать взгляд.
Кроме того, то, что Вы хотели сделать во-первых, использует базу данных сверху таблицы маршрутизации, которая была бы другим видом базы данных. Сохраните это простым. На серверах BGP много маршрутов на самом деле выбраны/предпочтены по политическим/финансовым причинам, каждый ISP/организация может сделать это, и они все добавляют определенные маршруты с этой целью. Стоимость транзита или постановления суда часто является причиной таких мер.
Я могу думать о двух дополнительных опциях, которые не требуют парсинга журналы BIND или вмешательства с BIND вообще.
1) Зеркальное отражение порта - копирует пакеты и отправляет их в отдельный порт, где приложение слушает, анализируя запросы DNS и принятие мер. dpkt
или scapy
или подобные пакетные библиотеки обработки помогут Вам проанализировать необработанные запросы.
2) Используйте некоторый тип пакетной библиотеки сниффинга для пассивного контроля запросов. Вот использование в качестве примера scapy
:
from scapy.all import *
def handler(req):
if req.haslayer(DNS) and req.getlayer(DNS).qr == 0:
ip = req.getlayer(IP)
dns = req.getlayer(DNS)
q = dns.qd
print q.qname # simply print domain name
if __name__ == '__main__':
sniff(iface="eth0", filter="udp and port 53", prn=handler, store=0)
Очевидно, это - просто примитивный пример. Это только печатает название домена, который был запрошен, но можно, конечно, добавить много логики. При ссылке на scapy документацию, Вы найдете, что все поля из запроса DNS легко доступны.
/dev/shm
, также. – Nils 03.02.2012, 23:41swatch
или OSSEC на журналах для вызова сценария. не очень хорошая идея в конечном счете, так или иначе. – Jodie C 08.04.2012, 03:59