Цикл для snmpwalk в ударе

Сквид А может использоваться для этого, однако существуют некоторые проблемы, которые необходимо не упустить:

  • Сквид еще не поддерживает кэширование частичного содержания, поэтому если ваше приложение будет использовать запросы диапазона вместо того, чтобы загрузить целый файл, то у вас будут некоторые проблемы. Можно настроить Сквид для выборки целого файла в кэше по запросу диапазона, но в этом случае он заблокируется, пока целый файл не загружается - если кэшируемый звуковой файл является устаревшим, и новая копия должна быть загружена, пользователи приложения должны будут ожидать сервера для загрузки целого файла, прежде чем приложение сможет играть его.

  • Ваше приложение должно использовать HTTP для выборки файлов, иначе у вас будут ошибки сертификата, если ваш прокси попытается прервать Подключения HTTPS,если вы не создадите сертификат для прокси и заставляете ваше приложение доверять ему, но затем все остальное помимо вашего приложения также бросит ошибки сертификата HTTPS, и вы ничего не можете делать с этим, обычно прерывание HTTPS является плохой практикой, если вы не проясняете своим пользователям и заставляете их установить сертификат.

, Чтобы вынудить трафик клиента пройти через Сквид без любой конфигурации с их стороны необходимо настроить Сквид как прозрачный прокси и затем использовать некоторое волшебство брандмауэра на пользовательском использовании шлюза для достижения Интернета для перенаправления всего Трафика HTTP к серверу Сквида:

http_port 3128 intercept # enable transparent proxy mode

Что касается конфигурации шлюза это зависит от того, какой брандмауэр работает там, для IPtables что-то вроде этого должно работать, предполагая, что ваш сервер Сквида находится позади того же шлюза как ваши пользователи:

iptables -t nat -A PREROUTING -s  -p tcp --dport 80 -j ACCEPT # accept HTTP traffic from the Squid
iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination :3128 # redirect your user's HTTP traffic to Squid
iptables -t nat -A POSTROUTING -j MASQUERADE # probably not needed since your gateway already has this

Ваш должен смотреть на документация Сквида , у них есть некоторые примеры для конфигурирования брандмауэров предприятия для этого.

0
06.05.2015, 02:22
3 ответа

Не работает, как вы хотите, насколько вы печатаете имя хоста до всех строк, хранящихся в строке . $ Var . Вместо того, чтобы зацикливаться и печатать имя хоста до каждой строки.

Вот один из способов петли через них, используя трубу и awk

snmpwalk -v2c -c private ${ip} .1.1.1.6 | awk -vHost="${hostname}" '{print Host"=>"$0}'
1
28.01.2020, 02:36

Вместо того, чтобы хранить вывод целиком (со встроенными символами новой строки) в переменной скаляра, можно было (я не говорил, что должен ) хранить строки в переменной массива.

С помощью ksh93, mksh, bash, zsh в эмуляции sh:

IFS='
' # split on newline
set -f
var=($(snmpwalk -v2c -c private "$ip" .1.1.1.6))

А затем используйте printf, как:

printf "$hostname=>%s\n" "${var[@]}"

Это предполагает, однако, что $hostname не содержит символов процента или обратного слеша.

rc и zsh проще:

  • rc:

    var = (``(").
    '){snmpwalk -v2c -c private $ip .1.1.1.6}))
    printf %s\n $hostname'=>'^$var
    
  • zsh:

    var=(${(f)"$(snmpwalk -v2c -c private $ip .1.1.1.6)"})
    printf '%s\n' $hostname'=>'$^var
    

(обратите внимание, что все эти решения игнорируют пустые строки)

1
28.01.2020, 02:36

Я не думаю, что это хорошая идея, чтобы присвоить переменной весь вывод команды, а затем сделать форматирование. Но если вы хотите это сделать, вы можете использовать printf для форматирования. Ключом к этому является расширение имени хоста внутри строки форматирования, так что только на список пар тип-значение в var будут влиять спецификаторы форматирования (%s и %d в данном случае), и printf гарантирует повторное использование спецификаторов формата для каждой пары данных:

var=`snmpwalk -v2c -c private ${ip} .1.1.1.6`
printf "${hostname}=>%s %d\n" ${var}

(Примечание: Вокруг ${var} нет кавычек. )

0
28.01.2020, 02:36

Теги

Похожие вопросы