2014-02-05 2 views
0

Я пытаюсь обновить команду awk, которая используется для синтаксического анализа/proc/net/ip_conntrack и выдает переменную строку в файл, который используется для отображения таблицы активных сеансов на веб-сайте. В настоящее время команда состоит в следующем:Как добавить строку в оболочке с awk и cURL

awk 'BEGIN { printf "var curr_connections=["} { gsub(/(src|dst|sport|dport)=/, ""); printf "['\''%s'\'','\''%s'\'','\''%s'\'','\''%s'\'','\''%s'\''],",$1,$1 == "tcp" ? $5 : $4,$1 == "tcp" ? $7 : $6,$1 == "tcp" ? $6 : $5,$1 == "tcp" ? $8 : $7; } END { print "[null]]"}' /proc/net/ip_conntrack 

Это дает мне этот пример вывода для каждой строки в ip_conntrack:

'74.125.225.145','443','http://api.hostip.info/country.php?ip=74.125.225.145' 

То, что я хотел бы сделать, это добавить завиток команду там для добавления IP-адреса страна происхождения для IP-адреса назначения. Если я просто запустите следующую команду в командной строке:

curl "http://api.hostip.info/country.php?ip=xxx.xxx.xxx.xxx" 

Я сортирую получить страну вернулся перед командной строкой. Моя проблема в том, каким-либо образом я пытаюсь добавить завиток команду в команду AWK он просто дает мне следующий вывод:

'tcp','192.168.2.101','55661','74.125.225.145','443','http://api.hostip.info/country.php?ip=74.125.225.145' 

Измененный команду AWK я использовал, чтобы это было:

awk 'BEGIN { printf "var curr_connections=["} { gsub(/(src|dst|sport|dport)=/, ""); printf "['\''%s'\'','\''%s'\'','\''%s'\'','\''%s'\'','\''%s'\'','\''%s'\''],",$1,$1 == "tcp" ? $5 : $4,$1 == "tcp" ? $7 : $6,$1 == "tcp" ? $6 : $5,$1 == "tcp" ? $8 : $7, $1 == "tcp" ? curl "http://api.hostip.info/country.php?ip="$6 : curl "http://api.hostip.info/country.php?ip="$5; } END { print "[null]]"}' /proc/net/ip_conntrack 

Я просмотрел довольно много тем на этом сайте и не смог найти ничего, что мог бы включить в эту работу. Я знаю, как я пытаюсь использовать cURL, это неверно, но я не смог найти правильный способ ввести его здесь, чтобы заставить его делать то, что я хочу.

Заранее благодарю за предоставленную любую помощь.

+2

Остановить попытку думать об этом как об одном вкладыше. переформатирование этого в структурированный код упростит вашу проблему (IHMO ;-)). Что мне непонятно из вашего описания, вы хотите создать команду curl и сохранить ее как часть вывода. Или вы хотите создать curl cmd И THEN выполнить его, распечатать вывод cmd в свой вывод. Возможно и то, и другое. посмотрите примеры awk 'getline' для одного способа выполнения cmd и захвата вывода в переменную. Удачи! – shellter

+0

Чтобы ответить на ваш вопрос, я пытаюсь создать команду curl, основанную на исходном IP-адресе, который находится на этой конкретной строке в ip_conntrack, и выполнить его немедленно. Я выясняю, что это невозможно, как я пытался это сделать. Как вы упомянули, моя лучшая ставка может заключаться в создании сегмента кода, который проходит цикл и строит строку, а затем выводит его в файл. Я надеялся, что это может быть сделано одним неудачным махом, просто изменив немного того, с чем мне уже приходилось работать. – ramoody

ответ

Смежные вопросы