Linux за българи: Форуми

Програмиране => Конкурс bash-майсторът => Темата е започната от: zeridon в Jan 23, 2008, 11:14



Титла: Задача 4 - 23.01.2008 - 06.02.2008
Публикувано от: zeridon в Jan 23, 2008, 11:14
The Discoverer

Тъй като сме фенове на малките домашни мрежи (а и кой ли не е), в нашето малко скромно 10-стайно жилище с два басейна и 4 килера си имаме малка скромна мрежичка от 5 - 6 машини. Понеже от време на време забравяме коя машина какви услуги предоставя сме решили да си напишем нещо (скриптче/програмче/демонче) което да открива какви услуги предоставя всяка от машините.

Услугите които предоставя коя да е от машините могат да бъдат:
 * самба (smb)
 * NFS
 * FTP
 * HTTP

Всичките ни услуги вървят на стандартни портове.
Една услуга се приема че работи (е налична) ако може да бъде достъпена свободно, анонимен достъп до FTP, guest достъп до самбата и т.н.

Задачката е напишете подходящото нещо което да ни предоставя в удобен вид коя машина какви услуги предоставя.
Бонус: Да се изведат и точно какви услуги се предлагат.
Втори бонус: UPnP, Bonjour, Rendezvous, afs

Награди:
 * 1-во място - Флаш памет 1Г + едно питие по желание на клиента :)
 * 2-ро място - едно питие по желание на клиента :)

Краен срок за решенията: 03.02.2007





Титла: Задача 4 - 23.01.2008 - 06.02.2008
Публикувано от: VladSun в Jan 23, 2008, 15:15
А референтното решение къде е  :p  :p  :p





Титла: Задача 4 - 23.01.2008 - 06.02.2008
Публикувано от: zeridon в Jan 23, 2008, 16:30
пфуу не питай ... толкова е калпаво че ме е срам да го пусна ... иначе както обикновенно е bash с бонуси nmap, smbclient, curl, ftp, rpcclient.


Титла: Задача 4 - 23.01.2008 - 06.02.2008
Публикувано от: SOMNIVM в Jan 23, 2008, 22:20
А адресите на машините от къде ги взимаме? Външен файл, кодирани "твърдо" или трябва да скенираме определен интервал от адреси? :)


Титла: Задача 4 - 23.01.2008 - 06.02.2008
Публикувано от: shadowx в Jan 24, 2008, 05:55
Тази задача ме заинтригува :)


Титла: Задача 4 - 23.01.2008 - 06.02.2008
Публикувано от: shadowx в Jan 24, 2008, 07:52
малко грозно написано но ....:>
lnxbg.tar.gz
в конфиг файла се описват хостовете и портовете който скрипта да проверява, също така и фтп юзър/парола.
След скан-а се генерира репорт /tmp/discover/IP-na-mashinata
Има проверка дали става логин с описания в конф-а юзър ... в репорт-а също така се описват шернати партишъни и скрипта се опитва да ги моунт-не автоматично в /tmp/discover/ ...

deps: nmap,smbclient,smbmount,wget

p.s.: zabravil sym NFS-a :p





Титла: Задача 4 - 23.01.2008 - 06.02.2008
Публикувано от: BULFON в Jan 24, 2008, 11:26
Мрежата може по подразбиране да е 192.168.0. и 192.168.1.
Пък може допълнително да се добавят и други адреси


Титла: Задача 4 - 23.01.2008 - 06.02.2008
Публикувано от: zeridon в Feb 01, 2008, 14:22
By a popular demand ... референтно решение. Грозно е и леко криптично но е удобно за последваща обработка

Примерен код
#!/bin/bash
#
# $Id$
#
# simple Service discovery for a lan :)

NET=192.168.17.0/24
PORTS="21 80 111 139"
PROG_SCAN="/usr/bin/nmap"

## Get live hosts
LIVE_HOSTS="`$PROG_SCAN -sP -n $NET | grep Host | awk '{print $2}'`"

## Get and check services (dumb one)
for PORT in $PORTS; do
        for LIVE_HOST in $LIVE_HOSTS; do
                if [ "x`$PROG_SCAN -sT -n $LIVE_HOST -p $PORT | grep $PORT | grep open | awk '{print $2}'`" == "xopen" ]; then
                        ## port is open for connect show em
                        echo "$LIVE_HOST|$PORT"
                fi
        done
done


Титла: Задача 4 - 23.01.2008 - 06.02.2008
Публикувано от: radoulov в Feb 01, 2008, 21:59
Примерен код

#! /bin/bash

net=(192.168.17.{0..24})
portlist=(21 80 111 139)

for h in "${net[@]}";do
    for p in "${portlist[@]}";do
        nc -nzw1 "$h" "$p"&&printf "host %s: port %s is open\n" "$h" "$p"
    done
done






Титла: Задача 4 - 23.01.2008 - 06.02.2008
Публикувано от: zeridon в Feb 06, 2008, 10:03
И така време е да обявим резултатите ...

Като цяло слабо, само две решения.

Разборът:

shadowx
Не съвсем пълно решение, интересно използване на имена ... (кой пише на Ц :) ). Изпълнено е дори повече от желаното в задачата. Има малко ексцесивно използване на файлове и малко разхвърляно поставяне на резултатите. Друг минус е че конфигурацията на скрипта е доста ... пространна и доста повтаряща се.

radulov
Кратко просто и ясно. Като минус трябва да се отбележи че се използват прекалено много ресурси за сканирането на мрежата.

Класация:
1-во място: shadowx
2-ро място: radulov

Награждаване :)
Тази вечер в кривото на Будапеща (дето си е бирата всяка сряда)