Вернуться   Форум об интернет-маркетинге > >
Ответ
 
Опции темы
Старый 05.10.2010, 02:44   #1
Джа любит вас!
 
Регистрация: 28.03.2010
Адрес: Россия, Москва
Сообщений: 163
Репутация: -38697
Отправить сообщение для jahost с помощью ICQ Send Message via Jabber to jahost

По умолчанию [linux] скрипт для сбора информации о домене/ip

"этхтоваще" - скрипт, собирающий разную информацию о домене/ip, как то: обратный резолв IP домена и его NS; домены на одном IP (о да ); открытые популярные порты; заголовки веб-серверов и другое. Подробнее смотрите в исходном коде файла hto.sh
таким образом, с его помощью можно почти стопроцентно определить, какой хостинг у определенного сайта, какие у него соседи, не является ли хостинг реселлингом, и разные другие штуки (например, не заражён ли вендосервер sasser`ом)

Скрипт имеет воз зависимостей, если не хотите всё устанавливать, то удалите в hto.sh код от
#---> проверка зависимостей
до
#---> проверка введенных данных
, но тогда скрипт может (и будет) работать некорректно.
точно работает на centos, debian и opensuse, еще говорят, что работает в убунте, но я не проверял. на windows может будет работать, если установите cygwin и весь воз зависимостей (говорят, работает). на *BSD теоретически должен работать, не проверял.
скрипт постоянно правлю, так что иногда выполняйте -u для обновления.
автор - я, лицензия - CC BY-NC-SA, засим прошу распространять бесплатно.
скачать: http://178.162.136.209/files/hto.zip
(где hto.sh - главный скрипт, hto_func - функции, hto_ports - список портов для проверки)
просьба воздержаться от комментариев типа "ололо говнокод" (знаю), также буду очень благодарен за примеры исправления кода (надо же учиться кодить), и прислушаюсь к пожеланиям
скрытого патча Бармина в скрипте нет. честно

пример работы:
Код:
02:47 linups:~ > этхтоваще searchengines.ru
-> домен: searchengines.ru
-> собираю NSы...
> ns1.worldwidedns.net. резолв:
207.97.208.112 => ns1.worldwidedns.net.
> ns2.worldwidedns.net. резолв:
207.97.208.176 => ns2.worldwidedns.net.
> ns3.nic.ru. резолв:
194.85.61.20 => ns3.nic.ru.
> ns3.worldwidedns.net. резолв:
65.61.138.186 => ns3.worldwidedns.net.
>>> посмотреть TXT/SOA? y
-> смотрю, есть ли IP в TXT...
неа, нету
-> смотрю, что в SOA...
searchengines.ru => . gray.searchengines.ru.
searchengines.ru => ns3.nic.ru. gray.searchengines.ru.
>>> вывести http-хедэры? y
80:
  HTTP/1.1 200 OK
  Server: nginx/0.4.12
  Date: Mon, 04 Oct 2010 22:43:04 GMT
  Content-Type: text/html
  Connection: close
  X-Powered-By: PHP/5.2.0
------------------------------
-> получаю IP с NS...
-> смотрю на публичных NS...
-> список IP:
83.222.4.124
------------------------------
>>> вывести инфу по 83.222.4.124? y
-> инфа по IP: 83.222.4.124
-> геоип:
GeoIP Country Edition: RU, Russian Federation
GeoIP City Edition, Rev 1: RU, 48, Moscow, N/A, 55.752201, 37.615601, 0, 0
GeoIP ISP Edition: MasterHost
GeoIP Organization Edition: Masterhost is a hosting and technical support orga
GeoIP City Edition, Rev 0: RU, 48, Moscow, N/A, 55.752201, 37.615601
GeoIP ASNum Edition: AS25532 .masterhost autonomous system
------------------------------
-> обратный резолв 83.222.4.124 от публичных NS:
searchengines.ru.
-> от NS провайдера (ns.masterhost.ru.):
searchengines.ru.
-> от NS домена:
> ns1.worldwidedns.net.:
нету нифига
> ns2.worldwidedns.net.:
нету нифига
> ns3.nic.ru.:
нету нифига
> ns3.worldwidedns.net.:
нету нифига
------------------------------
>>> посмотреть открытые порты? y
-> подожди, проверяю...
80 http
------------------------------
>>> собрать домены на ip? y
-> проверяю sitedossier...
готово!
-> проверяю bing...
готово!.
>>> проверить точность? y
-> подожди, проверяю...
готово!
>>> вывести список? y
aftonletarte.blogseo.ru
aleks.com.ua
bigmak.blogseo.ru
bl123.blogseo.ru
blogseo.ru
burnis.blogseo.ru
criminalva.blogseo.ru
ctox.blogseo.ru
deku.blogseo.ru
denpanas.blogseo.ru
depesha.blogseo.ru
djeri.blogseo.ru
eyeart.blogseo.ru
gray.blogseo.ru
inessablackshire.blogseo.ru
it-thoughts.ru
jiang35p.blogseo.ru
karakovski.blogseo.ru
karnadelbrouck.blogseo.ru
marillion.blogseo.ru
medinfo.blogseo.ru
micex.blogseo.ru
nundesign.blogseo.ru
ooops.blogseo.ru
pelbeg.net
reanimator.blogseo.ru
sagitaria.blogseo.ru
searchengines.ru
seotools.blogseo.ru
shineon.blogseo.ru
shnur.blogseo.ru
splog.blogseo.ru
stas.blogseo.ru
tarry.blogseo.ru
tender.blogseo.ru
vankov.blogseo.ru
viktor.blogseo.ru
vital.blogseo.ru
volunteers.blogseo.ru
wiki.searchengines.ru
yaroslav.blogseo.ru
zipak.blogseo.ru
------------------------------
>>> сделать трассировку? n
------------------------------
>>> попробовать трансфер зоны? y
-> пробую трансфер с NS ns1.worldwidedns.net.
никак :(
-> пробую трансфер с NS ns2.worldwidedns.net.
никак :(
-> пробую трансфер с NS ns3.nic.ru.
никак :(
-> пробую трансфер с NS ns3.worldwidedns.net.
никак :(
------------------------------
>>> вывести суммарную инфу с NS? y

searchengines.ru descriptive text "v=spf1 a mx a:mail.searchengines.ru a:forum.searchengines.ru include:aspmx.googlemail.com ~all"
searchengines.ru has address 83.222.4.124
searchengines.ru has SOA record . gray.searchengines.ru. 2010092006 21600 10800 604800 3600
searchengines.ru has SOA record ns3.nic.ru. gray.searchengines.ru. 2009062932 21600 10800 604800 3600
searchengines.ru mail is handled by 10 aspmx2.googlemail.com.
searchengines.ru mail is handled by 10 ASPMX2.GOOGLEMAIL.COM.
searchengines.ru mail is handled by 10 aspmx3.googlemail.com.
searchengines.ru mail is handled by 1 aspmx.l.google.com.
searchengines.ru mail is handled by 1 ASPMX.L.GOOGLE.COM.
searchengines.ru mail is handled by 5 alt1.aspmx.l.google.com.
searchengines.ru mail is handled by 5 ALT1.ASPMX.L.GOOGLE.COM.
searchengines.ru mail is handled by 5 alt2.aspmx.l.google.com.
searchengines.ru mail is handled by 5 ALT2.ASPMX.L.GOOGLE.COM.
searchengines.ru name server ns1.worldwidedns.net.
searchengines.ru name server ns2.worldwidedns.net.
searchengines.ru name server ns3.nic.ru.
searchengines.ru name server ns3.worldwidedns.net.
-------------конец------------
//прошу не переносить тему в другой раздел - тут, имхо, самое место.
__________________
By accepting this EULA you are accepting this EULA.
jahost вне форума   Ответить с цитированием

Реклама
Старый 05.10.2010, 03:04   #2
bugsmoran
Академик
 
Аватар для bugsmoran
 
Регистрация: 18.02.2010
Адрес: Ramat Gan, IL
Сообщений: 1,947
Репутация: 140147
Отправить сообщение для bugsmoran с помощью ICQ Отправить сообщение для bugsmoran с помощью MSN Отправить сообщение для bugsmoran с помощью Skype™ Send Message via Jabber to bugsmoran

По умолчанию Ответ: [linux] скрипт для сбора информации о домене/ip

Код:
# USAGE:
#bash hto.sh домен
# или:
#bash hto.sh ip.add.re.ss
# если сделать алиас (см.выше), то можно писать:
#этхтоваще домен
# или:
#этхтоваще ip.add.re.ss
# вместо "домен" написать нужный домен, и вместо "ip.add.re.ss" - нужный IP-адрес
Изучайте функцию getopts. Комментарии в коде не для пользователя существуют, а для программиста, который правит. Остальное через флаги выводится (или отсутствие флагов). Пользователю тяжело читать что-то в консоли. Как правило он не умеет.

Код:
if [ "$flag" = "1" ];
	then echo "exit"; exit;
fi
#---> проверка введенных данных
if [ "$1" = "" ];
	then echo "введи домен или ip! //опции: -v, -u, -h, -p, -y";
	exit;
fi
Все тот же getopts. Вообще половину скрипта можно выкинуть и заменить на десяток строчек getopts. При этом скрипт будет более читабельным и очевидным. Потому что я с трудом смог понять, что в нем делается.
К тому же очень много копипаст по коду. Чтобы не было копипаст,нужно один раз написать функцию, а потом ее дергать.

Код:
#--- СБОР IP
		echo "" > /tmp/ip1.txt && chmod 666 /tmp/ip1.txt
		echo "-> получаю IP с NS...";
		for i in `cat /tmp/ns.txt`; 
		do
#---> $1 - домен, $i - NS из того временного файла
		 ip=`host -t A $1 $i | grep -v "has\ no" | awk '{print $4}' | sed '/^ *$/d'`;
		 if [ "$ip" = "" ];
			 then echo "с $i нет нифига";
#---> пишем IP-ы во временный файл, сортируем его, ниже выводим список IP-ов
			 else echo $ip | sed 's/\ /\n/g' >> /tmp/ip1.txt
		 fi
		done
Изучайте массивы. Не хранят такое в файлах.

Код:
if [ "$i" = "67.215.66.132" ]; then
Хардкод. Такие вещи выносятся в начало скрипта в отдельную переменную.

Код:
echo "A нет нифига, походу домен невалидный";
...
rez=`nc -vw 1 -z $1 $port 2>&1 | egrep -vi '(timed.out|refused|in.progress)'`; #ёбаный дебиан!
Вот такое неуважение к собственному коду (псевдокураж над собственным кодом) бывает исключительно в мире похапэшников. Вы не на PHP пишете, потому нет смысла выключать официоз.

=========
P.S.: пример как использовать функции и массивы. Примеры. что были под рукой, не адаптированные под Вашу задачу. но показательные.

Кусочек apache2ctl, который проверяет ИСП на предмет уродования конфига, прежде чем рестартануть его). Весь код пишется один раз:
Код:
restore_config() {
    cp $APACHE2CONF'.backup' $APACHE2CONF
    exit 0;
}

extended_apache_configtest() {

APACHE2CONF="/etc/apache2/apache2.conf"

   if ! $HTTPD ${APACHE_ARGUMENTS} -t > /dev/null 2>&1; then
        $HTTPD ${APACHE_ARGUMENTS} -t || true
        restore_config
   fi

   if grep "^Listen" $APACHE2CONF /dev/null 2>&1; then
        restore_config
   fi

   cp $APACHE2CONF $APACHE2CONF'.backup'

}

case $ARGV in
start)
    mkdir -p ${APACHE_RUN_DIR:-/var/run/apache2}
    install -d -o ${APACHE_RUN_USER:-www-data} ${APACHE_LOCK_DIR:-/var/lock/apache2}
    # ssl_scache shouldn't be here if we're just starting up.
    # (this is bad if there are several apache2 instances running)
    rm -f ${APACHE_RUN_DIR:-/var/run/apache2}/*ssl_scache*
    $HTTPD ${APACHE_ARGUMENTS} -k $ARGV
    extended_apache_configtest
    ERROR=$?
    ;;
stop|graceful-stop)
    $HTTPD ${APACHE_ARGUMENTS} -k $ARGV
    ERROR=$?
    ;;
restart|graceful)
    extended_apache_configtest
    if $HTTPD ${APACHE_ARGUMENTS} -t 2> /dev/null ; then
        $HTTPD ${APACHE_ARGUMENTS} -k $ARGV
    else
        $HTTPD ${APACHE_ARGUMENTS} -t
    fi
    ERROR=$?
    ;;
Пример как использовать массивы:
Код:
       declare -a database_list
        for DATABASE in `mysql  -uroot -p$PASSWORD mysql -N --execute=\"show databases;\"`
        do
                database_list[db++]=$DATABASE;
        done

ну и собрав массив вот так использовать:

for database_item in ${database_list[@]}; \
do mysqldump ...  $database_item ... > ...
done
Пример использования getopts:

Код:
E_BADARGS=65

PrintHelpAndExit() {
        echo
        echo "Порядок использования:";echo
	echo "$0 [-a] -s hostN -b backupN";echo
        echo "Где hostN - имя хост-машины (Dom0), а backupN - имя бэкап-сервера"
	echo "или вместо hostN, serverN/IP-address, в случае бэкапа одного пользователя"; echo
	echo "Флаги:"
	echo "-s -- Имя целевого сервера"
	echo "-b -- Имя бэкап-сервера"
	echo "-t -- Тестовый запуск при подключении нового сервера"
        echo "-u -- User_ID удаляемого пользователя"
	echo "-a -- Бэкап всех серверов включая служебные" 
	echo "      (проигнорируется при использовании флага "-u")";
	echo "      (по умолчанию бэкапится только сервер,"
	echo "       на котором находятся пользовательские данные)";
        echo "-h -- Просмотр этой справки"; echo
        exit $E_BADARGS;
}


# Exemining options from command line
while getopts "s:b:u:aht" optionName; do
case "$optionName" in
	a) ALL_SERVERS=YES;;
	s) HOST=$OPTARG;;
	b) BACKUP_SERVER=$OPTARG;;
	u) USER_TO_DELETE=$OPTARG;; 
	t) DRY_RUN=YES;;
	h) PrintHelpAndExit 0;;
	\?) PrintHelpAndExit 0;;
	*) PrintHelpAndExit $E_BADARGS;;
esac
done

Последний раз редактировалось bugsmoran; 05.10.2010 в 03:51..
bugsmoran вне форума   Ответить с цитированием
Старый 05.10.2010, 03:18   #3
jahost
Джа любит вас!
 
Регистрация: 28.03.2010
Адрес: Россия, Москва
Сообщений: 163
Репутация: -38697
Отправить сообщение для jahost с помощью ICQ Send Message via Jabber to jahost

ТопикСтартер Ответ: [linux] скрипт для сбора информации о домене/ip

> Изучайте функцию getopts

спасибо, покурю!

> нужно один раз написать функцию, а потом ее дергать.

старался по-максимуму, см hto_func

> Изучайте массивы. Не хранят такое в файлах.

чем плохо использование файла?

> Такие вещи выносятся в начало скрипта в отдельную переменную.

ок, вынесу.

=======
спасибо за примеры, перепишу скрипт

jahost добавил 05.10.2010 в 04:55
bugsmoran, как в целом впечатление - хорошее дело делаю, или глупость затеял?

Последний раз редактировалось jahost; 05.10.2010 в 03:55.. Причина: Добавлено сообщение
jahost вне форума   Ответить с цитированием
Старый 05.10.2010, 03:56   #4
bugsmoran
Академик
 
Аватар для bugsmoran
 
Регистрация: 18.02.2010
Адрес: Ramat Gan, IL
Сообщений: 1,947
Репутация: 140147
Отправить сообщение для bugsmoran с помощью ICQ Отправить сообщение для bugsmoran с помощью MSN Отправить сообщение для bugsmoran с помощью Skype™ Send Message via Jabber to bugsmoran

По умолчанию Ответ: [linux] скрипт для сбора информации о домене/ip

Цитата:
Сообщение от jahost Посмотреть сообщение
> Изучайте массивы. Не хранят такое в файлах.

чем плохо использование файла?
Просто это другой культурный уровень. В данном случае малозначительно. Сейчас это по сути ничем не вредит. Но завтра напишите чуть более крупный скрипт по привычке через файл и сделаете нагрузку на диск и к тому же понизите надежность работы скрипта, потому что диск отваливается чаще памяти, да и очереди к нему выше, что задержит выполнение работы скрипта (а если там будет по крону, то еще и наложит друг на друга).
Короче привыкайте делать изначально качественно, даже если качество не требуется. Привычка - самое главное.

Цитата:
Сообщение от jahost Посмотреть сообщение
спасибо за примеры, перепишу скрипт
Незачто. Я там дополнил немного.

Цитата:
Сообщение от jahost Посмотреть сообщение
как в целом впечатление - хорошее дело делаю, или глупость затеял?
Не знаю Данные полчаете сомнительной ценности. Но может кому и пригодится. Вообще я бы быстрее руками посмотрел, что мне надо. На вкус и цвет...
bugsmoran вне форума   Ответить с цитированием
Старый 05.10.2010, 04:10   #5
jahost
Джа любит вас!
 
Регистрация: 28.03.2010
Адрес: Россия, Москва
Сообщений: 163
Репутация: -38697
Отправить сообщение для jahost с помощью ICQ Send Message via Jabber to jahost

ТопикСтартер Ответ: [linux] скрипт для сбора информации о домене/ip

наверное, стоит каждую функцию вынести как опцию.

> Вообще я бы быстрее руками посмотрел, что мне надо.

грабить sitedossier и bing руками неудобно

> Данные полчаете сомнительной ценности.

зато повышение навыка написания скриптов
jahost вне форума   Ответить с цитированием
Старый 05.10.2010, 14:50   #6
bugsmoran
Академик
 
Аватар для bugsmoran
 
Регистрация: 18.02.2010
Адрес: Ramat Gan, IL
Сообщений: 1,947
Репутация: 140147
Отправить сообщение для bugsmoran с помощью ICQ Отправить сообщение для bugsmoran с помощью MSN Отправить сообщение для bugsmoran с помощью Skype™ Send Message via Jabber to bugsmoran

По умолчанию Ответ: [linux] скрипт для сбора информации о домене/ip

Цитата:
Сообщение от jahost Посмотреть сообщение
наверное, стоит каждую функцию вынести как опцию.

> Вообще я бы быстрее руками посмотрел, что мне надо.

грабить sitedossier и bing руками неудобно
А их и не надо грабить. Утилиты whois, telnet и dig способны вытащить помоему всю возможную информацию. И вообще одного telnet на все достаточно.
bugsmoran вне форума   Ответить с цитированием
Старый 05.10.2010, 18:23   #7
ENELIS
Хостинг-провайдер
 
Регистрация: 29.08.2008
Сообщений: 1,502
Репутация: 82831
Социальные сети Профиль на Хабрахабре

По умолчанию Ответ: [linux] скрипт для сбора информации о домене/ip

Много лишней информации от скрипта, должен выдавать только при наличии информации и в конце список того, что не обнаружено, юзабилити нулевой конечно.
__________________
С Уважением,
Азаров Андрей
ServerAstra.ru - VPS и выделенные сервера в Будапеште по выгодным ценам!
ENELIS вне форума   Ответить с цитированием
Старый 05.10.2010, 19:35   #8
jahost
Джа любит вас!
 
Регистрация: 28.03.2010
Адрес: Россия, Москва
Сообщений: 163
Репутация: -38697
Отправить сообщение для jahost с помощью ICQ Send Message via Jabber to jahost

ТопикСтартер Ответ: [linux] скрипт для сбора информации о домене/ip

bugsmoran, приведите, пожалуйста, пример, как телнетом узнать список (почти)всех доменов на одном IP-адресе
ENELIS, в планах убрать вопросы и сразу выводить всю найденную информацию
jahost вне форума   Ответить с цитированием
Старый 06.10.2010, 01:05   #9
bugsmoran
Академик
 
Аватар для bugsmoran
 
Регистрация: 18.02.2010
Адрес: Ramat Gan, IL
Сообщений: 1,947
Репутация: 140147
Отправить сообщение для bugsmoran с помощью ICQ Отправить сообщение для bugsmoran с помощью MSN Отправить сообщение для bugsmoran с помощью Skype™ Send Message via Jabber to bugsmoran

По умолчанию Ответ: [linux] скрипт для сбора информации о домене/ip

Цитата:
Сообщение от jahost Посмотреть сообщение
bugsmoran, приведите, пожалуйста, пример, как телнетом узнать список (почти)всех доменов на одном IP-адресе
А, это да, это не узнать телнетом. Но это совершенно ненужное знание ведь. А то что нужно можно узнать телнетом.
bugsmoran вне форума   Ответить с цитированием
Старый 06.10.2010, 01:10   #10
jahost
Джа любит вас!
 
Регистрация: 28.03.2010
Адрес: Россия, Москва
Сообщений: 163
Репутация: -38697
Отправить сообщение для jahost с помощью ICQ Send Message via Jabber to jahost

ТопикСтартер Ответ: [linux] скрипт для сбора информации о домене/ip

Цитата:
Сообщение от bugsmoran Посмотреть сообщение
А, это да, это не узнать телнетом. Но это совершенно ненужное знание ведь. А то что нужно можно узнать телнетом.
но это довольно муторно, проще какой-нибудь host -t ANY $domain_name $ns_name

цикл с вопросом вынес в функции, основной скрипт стал намного короче. докурю getopts и сделаю "нормальное" меню, и выложу обновление.
jahost вне форума   Ответить с цитированием
Ответ



Опции темы

Быстрый переход


Регистрация Справка Календарь Поддержка Все разделы прочитаны