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):
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ę:
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:
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:
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.




