Система Orphus
Показаны сообщения с ярлыком bash. Показать все сообщения
Показаны сообщения с ярлыком bash. Показать все сообщения
[]

четверг, 26 апреля 2012 г.

Поиск отсутствующих файлов, упомянутых в include

( FILES="$(find /var/www/ -name '*.php' -exec grep include "{}" \; | \
  awk -F'"' '{print $2}' | sort | uniq)" && \
  echo "$FILES" && echo "$FILES" | \
  while read FILE ; do \
    find /var/www/ -name "$FILE"; \
  done | \
  sed -e 's/.*\/\(.\+\)$/\1/' ) | sort | uniq -u ; unset FILES

[]

среда, 25 апреля 2012 г.

Перекодировать файлы в текущем каталоге

# рекурсивно, все файлы
find -type f -exec enconv "{}" \;


# рекурсивно, выбрать по суффиксу (расширению)
find -type f \( -name '*.js' -o -name '*.php' \) -exec enconv "{}" \;


# только текущий каталог (не спускаться ниже), все файлы
find -type f -maxdepth 1 -exec enconv "{}" \;

[]

Сколько файлов в какой кодировке?

# все файлы
find -type f -exec enca -ip "{}" \; | sed -e 's/^.*\.//' | sort | uniq -c


# выбрать по суффиксу (расширению)
find -type f \( -name '*.js' -o -name '*.php' \) -exec enca -ip "{}" \; | sed -e 's/^.*\.//' | sort | uniq -c

Пример результата работы:
$ find -type f \( -name '*.js' -o -name '*.php' \) -exec enca -ip "{}" \; | sed -e 's/^.*\.//' | sort | uniq -c
     17 js: ASCII
     34 js: UTF-8
    238 php: ASCII
    117 php: UTF-8


понедельник, 25 октября 2010 г.

Скрипт для подготовки кода к публикации в блоге

Я периодически публикую код на страницах своего блога, и не редко мне приходится править код, чтобы он правильно обработался движком блога... Обычно приходится заменять следующие символы в соответствующие им html коды:
  • & → &
  • < → &lt;
  • > → &gt;
  • " → &quot;
  • ' → &apos;
Раньше я это делал вручную... Но на днях мне это надоело, поэтому решил набросать маленький скриптек, который бы сэкономил мне время и нервы...

четверг, 21 октября 2010 г.

Скрипт для получения информации о домене

Периодически мне бывает нужно получить информацию о каком-либо домене. Для этого я обычно использую utrace и whois. Но это как-то не очень удобно, хотелось все в консольке видеть. Поэтому был набросан однострочник, который выводил инфу с utrace на терминал:
wget -qO- 'http://xml.utrace.de/?query=google.ru' | \
  sed -e '/^<\/\?result\|^<?xml\|^<queries/d;s/<\/.\+>$//g;s/^<//g;s/>/\t\t: /g;s/\(^countrycode\|^latitude\|^longitude\)\t/\1/g'
Но все же это не совсем удобно. Вначале запускаю этот однострочник, потом whois, а потом, если вдруг приспичит глянуть, где стоит сервак интересуемого меня домен, то надо лезть на utrace. Не удобно в общем...

четверг, 2 июля 2009 г.

macfinder: Узнаем производителя сетевой железяки по его MAC'у

В сети есть замечательный инструмент для определения производителя сетевого оборудования по MAC-адресу. Точнее не по самому MAC-адресу, а по его первым 24 битам (3 байтам). Т.ж. поддерживается и обратная "работа".
Когда я узнал про эту онлайновую утилиту, то не долго думая сварганил скрипт, который позволяет не заходя на сайт узнать... Ну ты уже понял ;)

Сам скрипт прост как две копейки. Смотрит, что ему передали, делает запрос на сайт, получает ответ, парсит и показывает результат тебе.
$ macfinder

Использование:
macfinder MAC | -m Manufacturer

MAC - первые 24 бита mac-адреса (например, 00d0b7)
-m Manufacturer - название производителя (например, Intel)


Вот собственно и все :)
macfinder забирай тут.




Информация с сайта http://angel2s2.blogspot.com/. Если Вы читаете информацию на другом сайте, пожалуйста свяжитесь с автором сайта http://angel2s2.blogspot.com/.

[]

понедельник, 22 июня 2009 г.

Обновил ppa-key-import до версии 1.0

Я уже рассказывал про этот скрипт несколько раз, все темы по этому скрипту можете глянуть в теге ppa-key-import.

Напомню, что скрипт нужен для того, чтобы не выискивать ключи репозиториев на просторах launchpad.net, а просто импортировать их в систему одним махом.

Что же нового на этот раз?
Теперь скрипт умеет самостоятельно проверять файлы /etc/apt/*.list и импортировать ключи для тех репозиториев, для которых ключи еще не были импортированы.
Т.ж. скрипт можно установить в систему и при обновлении по списка пактов через sudo apt-get uptade будут импортированы ключи, которых еще нет в системе.
И еще появился импорт ключей для бета-репозиториев.

А теперь подробнее...


Если скрипт запустить без параметров, то он лезет в файл(ы) /etc/apt/*.list и "выковыривает" оттуда все репозитории с launchpad.net. После чего для каждого репозитория проверяется наличие в системе ключа-подписи. Если ключ есть, то об этом сообщается, а если нет, то ключ будет импортирован о чем так-же будет сообщено.

Чтобы скрипт установить в систему и интегрировать в apt-get есть параметр "-a":
ppa-key-import -a 
Т.ж. скрипт будет скопирован в /usr/bin. Это делается для того, чтобы если вы переместите скрипт в другое место он продолжал функционировать (apt-get же не знает о том, что вы переместили скрипт). Если добавить ключ "!", то скрипт перезапишет себя в /usr/bin и заново интегрируется (переинтегрируется) в apt-get:
ppa-key-import -a !
Для удаления скрипта из системы и его интеграции из apt-get есть ключ "-a -":
ppa-key-import -a -
Ключ скрипта "-b" предназначен для импорта ключей от бета-репозиториев:
ppa-key-import -b
Он был добавлен из-за UbuntuOne, т.к. я не захотел ставить предложенный пакет, а решил все сделать ручками :)


В части скрипта используются наработки, которые написал Dominic Evans, за что ему огромное спасибо :) А т.ж. спасибо Антону, автору блога "Крапленая колода", за то, что обратил мое внимание на этот скрипт и за тестирование ранних версий этого скрипта :)


Кстати, чуть не забыл, если скрипт установить (интегрировать) в систему, то каждый раз при выполнении команды "sudo apt-get update" вначале будет отрабатывать скрипт, а уже потом apt-get.


Скачать ppa-key-import :)





Информация с сайта http://angel2s2.blogspot.com/.
Если Вы читаете эту информацию на другом сайте, пожалуйста свяжитесь с автором сайта http://angel2s2.blogspot.com/.

[]

среда, 13 мая 2009 г.

Bash: Добавляем дату и время в историю команд (history)

Данная функция будет очень полезна, если сервер администрирует несколько человек, или даже в случае если вы единственный администратор сервера, вам будет полезна вспомнить когда та или иная команды была выполенены.

Отредактируйте ~/.bashrc добавив внизу такую строку:
export HISTTIMEFORMAT="%t%d.%m.%y %H:%M:%S%t"
и выполните команду (команда начинается с точки, за которой идет пробел)
. ~/.bashrc

Теперь вместо
$ history | awk '/history/'
1897 history | awk '/aptsearc/'
1898 history | awk '/aptsearch/'
1899 history | awk '/history/'
будет такой вывод
$ history | awk '/history/'
1897 13.05.09 13:20:11 history | awk '/aptsearc/'
1898 13.05.09 13:20:15 history | awk '/aptsearch/'
1899 13.05.09 13:20:34 history | awk '/history/'

Удобно? Для меня ДА :)



ЗЫЖ-1 Подсмотрено на http://guruadmin.ru/.
ЗЫЖ-2 Если кто захочет сделать свой формат даты-времени, то читаем тут.

вторник, 12 мая 2009 г.

Маленький однострочник на баше для получения погоды в консольку. Вариант 2.

Немного упростил и улучшил "Маленький однострочник на баше для получения погоды в консольку", о котором рассказывал в предыдущем посте (спасибо FrBrGeorge за напоминание про lynx :) )

Фарш получился такой:
lynx -nolist -dump http://wap.gismeteo.ru/wap2/towns/26702.wap2 | sed -e '1d' | sed -n '1,32p;32q'
Чтобы выводились нормальные русские буквы надо поставить пакеты lynx-cur и lynx-cur-wrapper.

четверг, 7 мая 2009 г.

Маленький однострочник на баше для получения погоды в консольку (на 3 дня)



wget -q -O - http://wap.gismeteo.ru/26702.wml |\
sed -e '/^<br\/>.*\|<\/\?p>\|<a href.*\|(c).*\|.*wapstart.ru.*\|.*wml.*\|.*?xml.*\|<\/card>/d;s/^.*title="\(.*\)">/\1\n\n/;s/<br\/>//g;s/<img src=.*alt="\(.*\)"\/> <b>\(.*\) .*<\/b>/\1 - \2/g'
Описание:

Чтобы получить погоду на свой город, идем по линку http://wap.gismeteo.ru/, жмем линк "Другие города", дальше находим свой город и смотрим его адрес, для Калининграда это http://wap.gismeteo.ru/wap2/towns/26702.wap2, вот тут нам нужно число, которое стоит перед ".wap2". Запоминаем его и вписываем в скрипт перед ".wml". Все :)


ЗЫЖ-1 Кстати, мой скрипт выводит инфу не на 3 дня, а на 9 кварталов (квартал = 6 часов, т.е. утро, день, вечер, ночь). Ошибся когда писал пост. Просто чтобы получить прогноз на 3 дня, надо еще одну страницу парсить, чего я не стал просто делать.

ЗЫЖ-2 Благодаря блогу Unix way из поста Погода в консоли узнал про хорошую утилитку weatherget написанную на питоне. Погоду она утягивает с http://xoap.weather.com/.
Пример использования:
weatherget -s RSXX0058 -m -e 3
В консольке будет погодка на 3 дня для Калининграда.



UPD: Есть обновочка :)


[]

четверг, 19 марта 2009 г.

ppa-key-import 0.4 - убита маленькая бага

Минут 5 назад постучался в джаббер мой приятель, автор блога Крапленая колода, и "пожаловался", что опять на лаунчпаде нахимичили, скрипт ppa-key-import ругаться стал. Полез я смотреть в чем дело... и появился ppa-key-import 0.4 :)


А причина была проста до банальности: достаточно было в grep добавить 7 символов :)

Скрипт берем по старой ссылке :)



ЗЫ: Если ты еще не знаешь, что это такое, то советую почитать предыдущии посты раз и два.


[]

четверг, 5 марта 2009 г.

ppa-key-import 0.3 - новая версия импортера ключей из PPA репозиториев

Не так давно я выкладывал скрипт для импорта ключей из PPA репозиториев, но, к сожалению, на сайте launchpad.net произошли изменения и старый скрипт уже не работает. Поэтому было решено это дело исправить, а заодно добавить приятную возможность :)

Теперь можено указывать не одно PPA имя архива, а сразу целую кучу :)

Вот пример:
$ ppa-key-import do-core claws-mail 123
Executing: gpg --ignore-time-conflict --no-options --no-default-keyring --secret-keyring /etc/apt/secring.gpg --trustdb-name /etc/apt/trustdb.gpg --keyring /etc/apt/trusted.gpg --recv-keys --keyserver keyserver.ubuntu.com A5D19FDCAA6ABB440CD3464628A8205077558DD0
gpg: запрашиваю ключ 77558DD0 с hkp сервера keyserver.ubuntu.com
gpg: ключ 77558DD0: "Launchpad PPA for GNOME Do Core Team" не изменен
gpg: Всего обработано: 1
gpg: неизмененных: 1
Executing: gpg --ignore-time-conflict --no-options --no-default-keyring --secret-keyring /etc/apt/secring.gpg --trustdb-name /etc/apt/trustdb.gpg --keyring /etc/apt/trusted.gpg --recv-keys --keyserver keyserver.ubuntu.com ADBADCEF515B37DA2F973FF6DF8030F05ED1D082
gpg: запрашиваю ключ 5ED1D082 с hkp сервера keyserver.ubuntu.com
gpg: ключ 5ED1D082: "Launchpad PPA for Claws Mail" не изменен
gpg: Всего обработано: 1
gpg: неизмененных: 1


!!! Было добавлено 2 PGP-ключей из 3 !!!
Не найдены: 123

Тут указано 3 ppa имени, но скрипт обработал только 2, о чем он и сказал в самом конце и сообщил какие из них не обработал, т.к. имени "123" не существует.


На всякий случай напомню, что с качестве параметров скрипту нужно передавать PPA имена архивов, т.е. если у нас в /etc/apt/sources.list есть запись, например, "deb http://ppa.launchpad.net/claws-mail/ubuntu intrepid main", то нам надо передать скрипту в качестве параметра строку claws-mail.



Скрипт доступен по старой ссылке.



[]

среда, 25 февраля 2009 г.

OpenPGP от репозиториев PPA... Гребем лопатой :)

На днях прочитал очень полезную заметку Ключ от репозитория PPA, где пакеты лежат (автору большой респект), из которой узнал то, чего мне так сильно не хватало.
Но вариант предложенный автором требует слишком много телодвижений из-за которых только теряем драгоценное время. Вот и встал у меня тут же вопрос: "А как его (время) сэкономить?". Решение пришло мигом.


Накатал маленький скриптег (полезная нагрузка всего 2 строки) и радуюсь :)

Работает просто. Принимает только один парамерт - имя пакета, для которого нужно получить OpenPGP ключ. Точнее сказать это не совсем имя... Может правильнее будет PPA имя архива? Т.е. если у нас в /etc/apt/sources.list есть запись, например, "deb http://ppa.launchpad.net/claws-mail/ubuntu intrepid main", то нам надо передать скрипту в качестве параметра строку claws-mail, например:
$ ppa-key-import claws-mail
gpg: запрашиваю ключ 5ED1D082 с hkp сервера keyserver.ubuntu.com
gpg: ключ 5ED1D082: открытый ключ "Launchpad PPA for Claws Mail" импортирован
gpg: Всего обработано: 1
gpg: импортировано: 1 (RSA: 1)
OK



Сам скрипт всегда можно взять тут: http://notesyoungeradmin.angel2s2.googlepages.com/ppa-key-import



ЗЫ: Иногда бывают глюки, т.к. лаунч пад не всегда выдает то что нужно, иногда какой-то урезанный ключ... :(


UPD: Обновил скрипт, т.к. на оф. сайте лаунчпада появился новый поход к этой теме. Теперь скрипт не использует временный файл.
Спасибо автору блога "Крапленая колода".


UPD2: Обновил скрипт, подробности тут.

[]

четверг, 19 февраля 2009 г.

port-check - чекаем порты без проблем или скрипт для проверки доступности портов


Нам, админам, довольно часто, точнее постоянно, приходится мониторить различные ресурсы своей сети и не редко удаленной. Если нет возможности поставить на хост средства мониторинга, то приходится проверить по портам. Раньше я это делал так:
netcat -w3 -z host port && echo OK
А что если нужно проверять несколько хостов и/или портов? Вот для этих целей и был написан скрипт.


Цель написания скрипта проста - возможность проверить несколько портов на одном и более хосте одной командой. Про существование различных программ я знаю, но не нашел подходящего для себя решения, поэтому написал свой скрипт основанный на netcat.

Ниже приведена справка по использованию скрипта port-check.
$ port-check --help

Скрипт port-check проверяет на доступность указанные порты на указанных хостах.
Возвращает количество закрытых портов.

Использование:
port-check [-q|-v] host port
port-check [-q|-v] host "port1 .. portN"
port-check [-q|-v] "host1 .. hostN" port
port-check [-q|-v] "host1 .. hostN" "port1 .. portN"



-q, --quiet
Ничего не выводить

-v, --verbose
Выводить т.ж. открытые порты, иначе только закрытые и не доступные хосты

-V, --version
Показать версию

-h, --help
Показать эту справку
Все проще некуда =)

А вот несколько примеров работы скрипта:
$ port-check -v "mail.ru google.com 10.0.0.1 192.168.0.1" "80 443 ssh 21"
mail.ru:80 open
mail.ru:443 CLOSE!!!
mail.ru:ssh CLOSE!!!
mail.ru:21 CLOSE!!!
google.com:80 open
google.com:443 open
google.com:ssh CLOSE!!!
google.com:21 CLOSE!!!
Host 10.0.0.1 unreachable!!!
192.168.0.1:80 open
192.168.0.1:443 CLOSE!!!
192.168.0.1:ssh CLOSE!!!
192.168.0.1:21 open


$ port-check -v "mail.ru google.com 10.0.0.1 192.168.0.1" 80
mail.ru:80 open
google.com:80 open
Host 10.0.0.1 unreachable!!!
192.168.0.1:80 open


$ port-check -v mail.ru "80 443 ssh 21"
mail.ru:80 open
mail.ru:443 CLOSE!!!
mail.ru:ssh CLOSE!!!
mail.ru:21 CLOSE!!!


$ port-check -v 10.0.0.1 "80 443 ssh 21"
Host 10.0.0.1 unreachable!!!


$ port-check -q 10.0.0.1 "80 443 ssh 21"


$ port-check "mail.ru google.com 10.0.0.1 192.168.0.1" "80 443 ssh 21"
mail.ru:443 CLOSE!!!
mail.ru:ssh CLOSE!!!
mail.ru:21 CLOSE!!!
google.com:ssh CLOSE!!!
google.com:21 CLOSE!!!
Host 10.0.0.1 unreachable!!!
192.168.0.1:443 CLOSE!!!
192.168.0.1:ssh CLOSE!!!
Вот и все. Надеюсь все понятно и наглядно.

Скачать port-check можно по этой ссылке. Пользуйтесь на здоровье.

Почти каждая строка в скрипте прокомментирована. Уверен, что даже новичок сможет разобраться, как работает скрипт.
Скрипт писал довольно долго, много тестировал, поэтому версия сразу 1.0 и, скорее всего, финальная. Даже не представляю, что еще в него можно добавить...


Критика/комментарии/мнения/etc с радостью принимаются :)))


среда, 24 декабря 2008 г.

Дом для spam-check'ера


Решил сделать не большой сайтег для своего скрипта spam-check.


Адресог: http://spamcheck.angel2s2.googlepages.com/

RSS пока не прикречивал, да и не знаю, буду ли вообщем его прикручивать. Все новости скрипта всегда будут в блоге и на сайте.

Сайт пока в тестовой стадии, многое еще предстоит добавить, но это уже по мере возможности и времени...

Жду комментов, мнений, критики =)


ЗЫ: После нового года планирую обновить скрипт, добавить кое чего...



UPD: Последнюю версию скрипта можно взять тут -> https://code.google.com/p/spamcheck/

четверг, 20 ноября 2008 г.

Автоматизация проверки своего IP по спам базам. Вершин ту.


Не так давно я выкладывал собственноручный скрипт для автоматической проверки своего IP по спам базам. Там было всего 11 баз. Да и работал он через http, что естественно не очень хорошо...
Но есть способ получше =)


И заключается он в том, чтобы обращаться к DNSBL напрямую. =)
Делается это просто, вот пример:
host -t TXT 4.3.2.1.xbl.spamhaus.org

тут 4.3.2.1 - это IP адрес задом наперед, а xbl.spamhaus.org - один из многочисленных DNSBL =)
В результате получим ответ:
Host 4.3.2.1.xbl.spamhaus.org not found: 3(NXDOMAIN)
что говорит о том, что хост с IP адресом 1.2.3.4 в этой базе не числится.
А если сделаем такой запрос:
host -t TXT 79.35.217.90.xbl.spamhaus.org
то получит ответ:
79.35.217.90.xbl.spamhaus.org descriptive text "http://www.spamhaus.org/query/bl?ip=90.217.35.79"
что явно указывает, что это IP адрес числится в спам базе. Даже ссылку дают, куда надо сходить в гости, чтобы тебя пожалели и удалили твой IP из этой спам базы :)

Человек по "имени" darkk (http://darkk.net.ru/) поделился со мной замечательной ссылкой http://www.robtex.com/. Замечательна она тем, что этот сайт знает более 100 DNSBL и, естественно, позволяет проверить свой IP. Но кому будет оходта заходить каждый день на этот сайт, вбивать свой IP и ждать результатов? Естественно хочется этот процесс как можно лучше автоматизировать и забыть про это дело. А вспоминать, только тогда, когда IP, какого-то фига, попал в какую-то спам базу.
Вот для этого я и написал этот скрипт.

Вот что он умеет:
Использование:
spam-check [-u] [[-e] [-g] [-s]] | [-v] | [-q] -p IP [IP2 [... [IPn]]]
spam-check -i input_file [-u] [[-e] [-g] [-s]] | [-v] | [-q] -p IP [IP2 [... [IPn]]]
spam-check -a dnsbl [-u] [[-e] [-g] [-s]] | [-v] | [-q] -p IP [IP2 [... [IPn]]]
spam-check -d [-u]

-u - Разрешить запуск скрипта от root'а
-e     - Показывать сообщения об ошибках
-g     - Показывать успешные проверки (НЕ СПАМ)
-s     - Не показывать не успешные проверки (СПАМ)
-v     - Выводить все
-q     - Ничего не выводить
-p     - IP адрес (можно указывать несколько IP, через пробел)
-i     - Файл со списком dnsbl-серверов
-a     - Проверить по указанному dnsbl
-d     - Вывести список всех dnsbl-серверов
-V     - Вывести версию
-h     - Показать справку

Особенности:
1. По умолчанию выводятся только не успешные проверки (СПАМ)
2. -g, -e и -s можно комбинировать.
3. -g, -e и -s нельзя использовать одновременно с -v и -q.
4. -v и -q одновременно использовать нельзя.
5. -p IP [IP2 [... [IPn]]] должен быть последним параметром.
6. -q абсолютно ничего не выводит.
7. Скрипт всегда возвращает следующие коды звершения:
0   - данного IP в спам базе нет;
1   - данный IP присутствует в спам базе;
255 - ошибка в параметре, запрошена справка/версия;
ошибки ответов от серверов не влияют на код завершения.
8. Если задано несколько IP и хоть один из них окажется хоть в кой-то спам базе, то код завершения будет равен 1.


В общем думаю тут и так все понятно. Скажу только, что ключ "-i" сделал на случай, если сервер http://www.robtex.com/ по какой-то причине откажется отдавать скрипту список DNSBL-серверов. А сохранить этот список предварительно можно так:
spam-check -d > dnsbl.list
или взять тут. А скрипт можно взять тут.

Если будут просьбы, сделаю порт для винды.



ЗЫ: Хочу выразить благодарность:
slash - указал на досадную ошибку с psbl.surriel.com (0.1.x)
Tenno Seremel - помог с правильным запросом для wget (0.1.x)
ramok - помог многими советами (wget, sed, dnsbl, printf) (0.1.x & 0.2.x)
darkk - помог с документацией по dnsbl и поделился ссылкой на сайт http://www.robtex.com/, указал на mktemp (0.2.x)


UPD: Добавил mktemp и защиту от запуска под рутом, а т.ж. опцию -u для разрешения запуска под рутом.



UPD: Последнюю версию скрипта можно взять тут -> https://code.google.com/p/spamcheck/

вторник, 18 ноября 2008 г.

Автоматизация проверки своего IP по спам базам


Кто-то админит локальную сеть, кто - веб-сервер, а кому-то, как и мне, приходится админить почтовый сервер... Такие админы знают каково бывает не сладко, когда их компания делает рассылку своим клиентам, т.к. очень часта в таких случаях их сервер (точнее IP сервера) попадает в спам базы...


Вот нам и приходится периодически проверять свой IP по спам базам, чтобы письма ходили всегда хорошо. Но проходить вручную по десятку спам-баз и вводит везде свой IP для проверки очень даже утомляет... Поэтому я решил автоматизировать этот процесс bash-скриптом.

Работа скрипта проста:
spam-check 22.22.22.22

В результате мы увидим следующее:
[OK]  - spamcop.net  - 22.22.22.22 not listed in bl.spamcop.net.
[OK]  - njabl.org  - 22.22.22.22 not found in the list.
[OK]  - www.five-ten-sg.com - 22.22.22.22 is not listed here.
[-No Lookup-] - junkemailfilter.com - ERROR - Reverse DNS Lookup Failed for [22.22.22.22]. 22.22.22.22 is NOT LISTED in any Hostkarma list.
[OK]  - mail-abuse.com - The IP address entered was not found on any database managed by Trend Micro's Network Reputation Services.
[OK]  - apews.org  - We found no entry matching your search. 
[OK]  - psbl.surriel.com - The host 22.22.22.22 has never been listed in PSBL.
[OK]  - psbl.surriel.com - We have no spamtrap mail on record for 22.22.22.22.
[OK]  - wpbl.info  - 22.22.22.22 not found in database.


Поле
[-No Lookup-] - junkemailfilter.com - ERROR - Reverse DNS Lookup Failed for [22.22.22.22]. 22.22.22.22 is NOT LISTED in any Hostkarma list.
говорит о том, что сервер не смог разрешить IP в доменное имя. Это единственный сервер из этого списка, который делает такую проверку, поэтому я ее включил.


Если же IP в спам базе, то мы увидим следующее:
$ spam-check 90.217.35.79
[+++SPAM+++]    - spamcop.net           - 90.217.35.79 listed in bl.spamcop.net (127.0.0.2).
[OK]            - njabl.org             - 90.217.35.79 not found in the list.
[OK]            - www.five-ten-sg.com   - 90.217.35.79 is not listed here.
[+++SPAM+++]    - junkemailfilter.com   - Your reverse DNS is correct! - 5ad9234f.bb.sky.com. 90.217.35.79 is Black listed.
[+++SPAM+++]    - mail-abuse.com        - The IP address 90.217.35.79 does appear on the following databases managed by Trend Micro's Network Reputation Services.
[OK]            - apews.org             - We found no entry matching your search. 
[+++SPAM+++]    - psbl.surriel.com      - Currently listed in PSBL?  Yes.
[+++SPAM+++]    - psbl.surriel.com      - Received spamtrap mail for 90.217.35.79.
[+++SPAM+++]    - wpbl.info             - Total spam sightings (last 90 days) - 4.


Возможно, некоторые удивлятся, что в этом списке нет довольно известной спам базы http://www.spamhaus.org/, но дело в том, что у меня не получилось сделать работу с ней через скрипт. Дело в том, что сервер http://www.spamhaus.org/, скорее всего, проверяет поле UserAgent браузера, я пробовал воспользоваться параметром -U утилиты wget, но результат это не дало. Буду очень признателен, если кто-нибудь поможет и с ним разобраться.


Ну и конечно-же сам скрипт, как же без него :)


Вот и все, чем я хотел поделиться с вами на этот раз, коллеги :)

ЗЫ: Если кто найдет ошибки, прошу меня уведомить, в комментах или по мылу на saimon.ghost [гав-гав] Гмыл0 [тут_точка] ком (защита от спама :-Р ).


UPD: Сделал новый скрипт, на много лучше, подробности тут.



UPD: Последнюю версию скрипта можно взять тут -> https://code.google.com/p/spamcheck/

[]

вторник, 24 июня 2008 г.

Мой bash-конфиг...


Ты часто работаешь в шелле? А я - ДА!
Тебе удобно работать в шелле? А мне - ДА!

А дело тут просто: нужно настроть файлик ~/.bashrc и больше не придется париться, а работа станет быстрее и удобнее.

Ниже я выложил содержимое моего файла ~/.bashrc и комментариями, поэтому разберешься сам. Ну а я думаю тебе будет это полезно узнать (если еще не знаешь)... =)

В основном этот конфиг заточен под убунту, для других *nix систем его пидется подправить немножко...



# Для начала определить некоторые цвета:

red='\e[0;31m' # Красный, темнее след.

RED='\e[1;31m' # Красный, светлее пред.

blue='\e[0;34m' # Синий, темнее след.

BLUE='\e[1;34m' # Синий, светлее пред.

cyan='\e[0;36m' # Циановый, темнее след.

CYAN='\e[1;36m' # Циановый, светлее пред.

NC='\e[0m' # No Color (нет цвета)

# Определил 2 раза для удобства :)

Black='\e[0;30m'

DarkGray='\e[1;30m'

Blue='\e[0;34m'

LightBlue='\e[1;34m'

Green='\e[0;32m'

LightGreen='\e[1;32m'

Cyan='\e[0;36m'

LightCyan='\e[1;36m'

Red='\e[0;31m'

LightRed='\e[1;31m'

Purple='\e[0;35m'

LightPurple='\e[1;35m'

Brown='\e[0;33m'

Yellow='\e[1;33m'

LightGray='\e[0;37m'

White='\e[1;37m'

NoColor='\e[0m'



# Лучше выглядит на черном фоне.....

echo -en "${red}"

date "+%A, %d %B %Yг. %H:%M:%S (%:::z - %Z)"

echo -en "$NC\n"



export HISTSIZE=2000 # Длина истории команд

export HISTFILE=~/.bash_history # Где хранить историю команд

# export HISTCONTROL="ignoredups" # Не дублировать команды



# Чтобы история команд сохранялась сразу после ввода (а не во время закрытия терминала)

shopt -s histappend

PROMPT_COMMAND='history -a'



# Испраляет ошибки в написании

shopt -s cdspell



# Разорванные многострочные команды в истории команд

shopt -s cmdhist



# "Заготовки" для 'ls' (предполагается, что установлена GNU-версия ls)

alias ll="/bin/ls -lh --color" # Отображает символьную инфу о типе файла

alias l1="/bin/ls -1Fh --color" # Вывод содержимого каталога в один столбец + отображение символьной инфы о типах файлов

alias lr="/bin/ls -Rh --color" # Вывод содержимого с подкаталогами

alias la="/bin/ls -lAh --color" # Подробный пывод содержимого каталога, включая скрытые файлы

alias ls='/bin/ls -hFh --color' # выделить различные типы файлов цветом

alias lx='/bin/ls -lXBh --color' # сортировка по расширению

alias lk='/bin/ls -lSrh --color' # сортировка по размеру

alias lc='/bin/ls -lcrh --color' # сортировка по времени изменения

alias lu='/bin/ls -lurh --color' # сортировка по времени последнего обращения

alias lt='/bin/ls -ltrh --color' # сортировка по дате

alias lm='/bin/ls -lAh --color | more' # вывод через 'more'





# На первый взягляд это бред, но когда привыкаешь, реально ускоряет работу

alias md="/bin/mkdir"

alias mds="sudo /bin/mkdir"

alias mkdirs="sudo /bin/mkdir"



alias mdp="/bin/mkdir -p"

alias mdps="sudo /bin/mkdir -p"



alias cp="/bin/cp -iv"

alias cps="sudo /bin/cp -iv"



alias cpi="/bin/cp -v"

alias cpis="sudo /bin/cp -v"



alias cpR="/bin/cp -Rv"

alias cpRs="sudo /bin/cp -Rv"



alias cpr="/bin/cp -Riv"

alias cprs="sudo /bin/cp -Riv"



alias mv="/bin/mv -iv"

alias mvs="sudo /bin/mv -iv"



alias mvi="/bin/mv -v"

alias mvis="sudo /bin/mv -v"



alias rm="/bin/rm -iv"

alias rms="sudo /bin/rm -iv"



alias rmi="/bin/rm -v"

alias rmis="sudo /bin/rm -v"



alias rmr="/bin/rm -Rfiv"

alias rmrs="sudo /bin/rm -Rfiv"



alias rmri="/bin/rm -Rfv"

alias rmris="sudo /bin/rm -Rfv"



alias ..="cd .."

alias ...="cd ../.."

alias ....="cd ../../.."

alias .....="cd ../../../.."





alias cls="/usr/bin/clear" # Если ты привык к консоле винды, то тебе это поможет





alias h='history' # История команд

alias j='jobs -l' # Задания

alias path='echo -e ${PATH//:/\\n}' # Значение переменной окружения $PATH

alias recfg='. ~/.bashrc' # Перечитать настройки BASH (иногда бывает полезно, особенно для отладки)



alias du='/usr/bin/du -kh' # Размер всех подкаталогов в каталоге (включая др. ф.с.)

alias duS='/usr/bin/du -khxS' # Размер всех папок в каталоге (не переходить в др. ф.с.)

alias dus='/usr/bin/du -khxs' # Размер каталога (не переходить в др. ф.с.)

alias df='/bin/df -kh' # Занятое пространство на диске



alias upgrade='sudo apt-get update ; sudo apt-get upgrade' # Обновление пакетов



alias aptsearch='sudo apt-cache search ' # Поиск пакетов в репозиториях

alias aptinstall='sudo apt-get install ' # Установить пакет из репозитория

alias aptremove='sudo apt-get remove ' # Удалить пакет из системы

alias aptpurge='sudo apt-get purge ' # Удалить пакет из системы и его конф. файлы

alias aptautoremove='sudo apt-get autoremove' # Автоматически удалить не нужные пакеты из системы



alias 'restart-gnome'='sudo /etc/init.d/gdm restart' # Перезапустить GNOME



alias 'cd-'='cd -' # Перейти в последнюю дирректорию (бывает забываю пробем поставить)





# проверка правописания

alias xs='cd'

alias vf='cd'

alias moer='more'

alias moew='more'

alias kk='ll'





# Не все эти функции писал я сам, есть и не мои работы, но авторов уже не помню, к сожалению :(



function dfp() # Сколько занято на опр. ф.с. в %

{

/bin/df -kh | /bin/grep $1 | /usr/bin/cut -c41-43

}





function lg() # ls -lAh --color <path> | grep <filter>

{

if [ "$1" = "" ] && [ "$2" = "" ]; then

echo -en "\n${Blue}Команда$NC ${LightRed}lg$NC ${Blue}выводит список файлов с фильтрацией (тоже самое, что ${LightRed}ls -lA$NoColor ${Red}<patn>${NoColor} ${LightRed}| grep${NoColor} ${Red}<filtet>${NoColor}${Blue})${NoColor}"

echo -en "\n${Cyan}Использование:$NC ${LightRed}lg$NC ${Red}[path] <filter>$NC"

echo -en "\n${Cyan}Если$NC ${Red}[path]$NC ${Cyan}не задан, то используется текущая дирректория.$NC\n\n"

elif [ "$1" != "" ] && [ "$2" = "" ]; then

/bin/ls -lAh --color $(/bin/pwd) | /bin/grep $1

else

/bin/ls -lAh --color $1 | /bin/grep $2

fi

}



function my_ip() # IP адрес

{

MY_IP=$(/sbin/ifconfig ppp0 | /usr/bin/awk '/inet/ { print $2 } ' | /bin/sed -e s/addr://)

MY_ISP=$(/sbin/ifconfig ppp0 | /usr/bin/awk '/P-t-P/ { print $3 } ' | /bin/sed -e s/P-t-P://)

}



function ii() # Дополнительные сведения о системе

{

echo -e "\nВы находитесь на ${RED}$HOSTNAME"

echo -e "\nДополнительная информация:$NC " ; /bin/uname -a

echo -e "\n${RED}В системе работают пользователи:$NC " ; /usr/bin/w -h

echo -e "\n${RED}Дата:$NC " ; /bin/date +"%A, %d %B %Yг. %H:%M:%S (%:::z - %Z)"

echo -e "\n${RED}Время, прошедшее с момента последней перезагрузки :$NC " ; /usr/bin/uptime

echo -e "\n${RED}Память :$NC " ; /usr/bin/free

my_ip 2>&- ;

echo -e "\n${RED}IP адрес:$NC" ; echo ${MY_IP:-"Соединение не установлено"}

echo -e "\n${RED}Адрес провайдера (ISP):$NC" ; echo ${MY_ISP:-"Соединение не установлено"}

echo

}



function swap() # меняет 2 файла местами

{

if [ "$1" = "" ] || [ "$2" = "" ]; then

echo ""

echo -e "${blue}Команда$NC ${RED}swap$NC ${blue}меняет 2 файла местами$NC"

echo -e "${cyan}Использование:$NC ${RED}swap$NC ${red}<file1> <file2>$NC"

echo ""

else

local TMPFILE=tmp.$$

/bin/mv -v "$1" $TMPFILE

/bin/mv -v "$2" "$1"

/bin/mv -v $TMPFILE "$2"

fi

}



function sswap() # меняет 2 файла местами с правами root'a

{

if [ "$1" = "" ] || [ "$2" = "" ]; then

echo ""

echo -e "${blue}Команда$NC ${RED}sswap$NC ${blue}меняет 2 файла местами с правами root'а$NC"

echo -e "${cyan}Использование:$NC ${RED}sswap$NC ${red}<file1> <file2>$NC"

echo ""

else

local TMPFILE=tmp.$$

sudo /bin/mv -v "$1" $TMPFILE

sudo /bin/mv -v "$2" "$1"

sudo /bin/mv -v $TMPFILE "$2"

fi

}



function myps()

{

ps $@ -u $USER -o pid,%cpu,%mem,bsdtime,command ;

}

function pp()

{

myps f | /usr/bin/awk '!/awk/ && $0~var' var=${1:-".*"} ;

}





function lowercase() # перевести имя файла в нижний регистр

{

for file ; do

filename=${file##*/}

case "$filename" in

*/*) dirname==${file%/*} ;;

*) dirname=.;;

esac

nf=$(echo $filename | tr A-Z a-z)

newname="${dirname}/${nf}"

if [ "$nf" != "$filename" ]; then

/bin/mv "$file" "$newname"

echo "lowercase: $file --> $newname"

else

echo "lowercase: имя файла $file не было изменено."

fi

done

}





# Поиск файла по шаблону:

function ff()

{

if [ "$1" = "" ]; then

echo ""

echo -e "${blue}Команда$NC ${RED}ff$NC ${blue}ищет файл по шаблону в текущем каталоге$NC"

echo -e "${cyan}Использование:$NC ${RED}ff$NC ${red}<шаблон>$NC"

echo ""

else

/usr/bin/find . -type f -iname '*'$*'*' -ls ;

fi

}





# Поиск файла по шаблону в $1 и запуск команды в $2 с ним:

function fe()

{

if [ "$1" = "" ] || [ "$2" = "" ]; then

echo ""

echo -e "${blue}Команда$NC ${RED}fe$NC ${blue}ищет файл по шаблону в текущем каталоге и выполняет заданную команду над ним$NC"

echo -e "${cyan}Использование:$NC ${RED}ff$NC ${red}<шаблон> <команда>$NC"

echo ""

else

/usr/bin/find . -type f -iname '*'$1'*' -exec "${2:-file}" {} \; ;

fi

}





# поиск строки в файлах:

function fstr_help()

{

echo -en "\n${blue}Команда$NC ${RED}fstr$NC ${blue}ищет заданную строку в файлах из текущего католога и его подкаталогах$NC\n"

echo -en "${cyan}Использование:$NC ${RED}fstr$NC ${red}[-i] \"шаблон_строки_для_поиска\" [\"шаблон_имени_файла\"]$NC\n"

echo -en " ${red}-i$NC ${blue}- не учитывать регистр$NC\n"

echo -en " ${blue}если$NC ${red}\"шаблон_имени_файла\"$NC ${blue}не задан, то поиск ведется по всем файлам$NC\n\n"

}





function fstr()

{

OPTIND=1

local case=""

local usage="${blue}Команда$NC ${RED}fstr$NC ${blue}ищет заданную строку в файлах из текущего католога и его подкаталогах$NC

${cyan}Использование:$NC ${RED}fstr$NC ${red}[-i] \"шаблон_строки_для_поиска\" [\"шаблон_имени_файла\"]$NC

${red}-i$NC - не учитывать регистр

если \"шаблон_имени_файла\" не задан, то поиск ведется по всем файлам"

while getopts :it opt

do

case "$opt" in

i) case="-i " ;;

#*) echo "$usage"; return;;

*) fstr_help; return;

esac

done

shift $(( $OPTIND - 1 ))

if [ "$#" -lt 1 ]; then

#echo "$usage"

fstr_help

return;

fi

local SMSO=$(tput smso)

local RMSO=$(tput rmso)

/usr/bin/find . -type f -name "${2:-*}" -print0 | /usr/bin/xargs -0 /bin/grep -sn ${case} "$1" 2>&- | /bin/sed "s/$1/${SMSO}\0${RMSO}/gI" | /bin/more

}