DEVart

Lista domen i adresów IP

by intro on lis.14, 2011, under Direct Admin, Pomysłownia

Kolejny wpis zainspirowany przez mojego przyjaciela (dzięki Tomku;-) ). Któregoś dnia potrzebowaliśmy listy domen wraz z ich adresami IP jakie mamy skonfigurowane na serwerze poprzez Direct Admin. Początkowo pomyślałem sobie, że gdzieś musi być takowa lista dostępna z poziomu panelu DA. No i znalazłem coś takiego (dostęp: Reseller Level / List Users):

Direct Admin - lista użytkowników

No i wszystko było by git, ale.. Co jeśli mam:

  • kilkunastu userów
  • kilka adresów IP dla jednego usera
  • kilka domen dla jednego adresu IP

Średnio przyjemnie będzie się klikało w DA tam i z powrotem żonglując pomiędzy „CTRL+C” a „CTRL+V” ;-) Cóż więc uczynić.. nie, nie „siąść i płakać” tylko działać. A nasze działanie tym razem będzie się opierało na stworzeniu nieskomplikowanego aczkolwiek przydatnego skryptu shell’owego. Przy okazji nauczymy się kilku prostych komend konsolowych które mogą nam zaoszczędzić sporo niepotrzebnego klikania. No to do broni rodacy!

Rozwiązanie

Skoro w panelu DA mamy te listy domen z adresami przedstawione w taki czy inny sposób to muszą one gdzieś być przechowywane, pewnie w jakichś plikach. Skoro tak to wchodzimy do katalogu w którym zainstalowany jest DA (w moim przypadku to jest to /usr/local/directadmin/ CENTOS 5)

1
~$ cd /usr/local/directadmin/

Bez zbędnego owijania w bawełnę podpowiadam, że pliki zawierające listę adresów dla konkretnych domen mają na końcu w nazwie „.ip_list”. Czyli dla domeny sample.com lista adresów IP znajduje się w pliku sample.com.ip_list. Adresy IP wypisane są kolejno, jeden pod drugim. Ok to mamy już wzorzec nazwy pliku, który nas interesuje. Jako, że pliki te zawierają informacje dotyczące domeny, najprawdopodobniej znajdziemy je w katalogu /usr/local/directadmin/data/users/user_name/domains, gdzie „user_name” to nazwa użytkownika, którego domen szukamy. No to listujemy pliki z tego katalogu:

1
~$ ls -la /usr/local/directadmin/data/users/devart/domains

Jako, że lista jest spora pozwolę sobie pominąć umieszczanie screena na tym etapie..
Ok to tera zawężamy listę wyników jedynie do plików które nas faktycznie interesują:

1
~$ ls -la /usr/local/directadmin/data/users/devart/domains | grep ".ip_list"

Wstawienie znaku „|” (potok) powoduje przekierowanie wyniku jednego programu do drugiego. W naszym przypadku przekazujemy wynikową listę plików z polecenia „ls” do dalszej obróbki przez polecenie „grep” które pozwala nam odfiltrować tylko te wyniki, które pasują do naszego wzorca czyli zawierające „.ip_list” na końcu nazwy pliku. Po tej operacji mamy taką oto listę:

List aplików ip_list

No to mamy listę plików, ale trochę zaśmieconą, przydało by się ją lekko przeczyścić, bo tak w gruncie rzeczy potrzebujemy teraz tylko nazw plików, w tym celu użyjemy dość potężnego narzędzia jakim jest awk.

1
~$ ls -la /usr/local/directadmin/data/users/devart/domains | grep ".ip_list" | awk '{print $9}'

Po odpaleniu powyższej komendy nasza lista wygląda tak:

Lista nazw plików - ip_list

Wygląda na to, że pierwszy punkt zaczepienia już mamy. Generalnie potrzebujemy nazwy domeny oraz adresu IP jaki został do niej przypisany. Nazwy domen zawarte są w nazwach plików, które wylistowaliśmy powyżej (wyciągniemy je później). Możemy łatwo podejrzeć sobie zawartość pojedynczego pliku domeny posługując się komendą cat

1
~$ cat /usr/local/directadmin/data/users/devart/domains/sample.com.ip_list

Powyższe polecenie wyświetli nam adresy IP które znajdują się w pliku sample.com.ip_list, czyli są przypisane do domeny sample.com.

na chwilę obecną:

  • wiemy gdzie szukać plików zawierających potrzebne informacje
  • wiemy jak wydobyć nazwy potrzebnych plików
  • wiemy jak pobrać ich zawartość

pora na połączenie wszystkiego w całość i utworzenie skryptu (do zapoznania się z podstawami tworzenia skryptów shell odsyłam tutaj). Żeby skrypt był bardziej elastyczny pozwolę sobie od razu wyposażyć go w obsługę parametru którym będzie nazwa usera.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#!/bin/sh                                         
 
#pętla po znalezionych plikach ".ip_list"                                                                                                                                                                                         
for file in `ls -la /usr/local/directadmin/data/users/$1/domains | grep ".ip_list" | awk '{print $9}'`                                                                                   
do             
    # pod zmienną <em>rezult</em> podstawiamy zawartość aktualnie przetwarzanego pliku, czyli listę jego adresów IP         
    result=`cat /usr/local/directadmin/data/users/$1/domains/$file`
    # zmienna domain_name będzie przechowywać nazwę domeny którą wyciągamy z nazwy aktualnie przetwarzanego pliku
    domain_name=`echo $file | awk '{print substr ($0,0,length($0)-8)}'`
    #jeżeli da się wydobyć nazwę domeny to:
    if [[ $? -eq 0 ]]
    then
        # wyświetlamy zestawienie w postaci: nazwa domeny - adres IP
        echo  $domain_name " - "  $result  
    fi
done

Powyższy skrypt zapisujemy do pliku np. find_d.sh, następnie uruchamiamy z poziomu root’a komendą

1
~$ sh find_d.sh user_name

Gdzie „user_name” to nazwa użytkownika dla którego listę domen wraz z adresami IP chcemy wyświetlić. Wynikiem komendy będzie lista podobna to tej:

Lista domen i adresow IP

To by było na tyle jeśli chodzi o listę domen wraz z ich IP. Można przerobić delikatnie powyższy skrypt w pełni go automatyzując tak aby sam pobierał sobie listę dostępnych userów i dla wszystkich automatycznie wylistował domeny. Można by również pokusić się o inne kosmetyczne ulepszenia, np. takie które pozwoliło by na pogrupowanie nazw domen względem adresów IP. Jak można się domyślić w chwili obecnej skrypt wyświetli powtórzone pozycje adresów IP dla oddzielnych domen.

Zapraszam do komentowania oraz przedstawiania swoich propozycji modyfikacji skryptu aby był jeszcze bardziej użyteczny.

:, ,

Leave a Reply

Security Code:

Szukasz informacji?

Skorzystaj z formularza poniżej aby przeszukać stronę:

W dalszym ciągu nie jesteś w stanie znaleźć interesujących Cię informacji? Skontaktuj się ze mną!

Polecane strony

Kilka adresów stron które powinieneś odwiedzić:

Archiwum

Wszystkie wpisy, chronologicznie: