[Linux] 無聊練 Shell - DNS查詢反解淡江主機名稱

不多說
先上代碼

#!/bin/bash

REGEX_HOST_NAME=([a-zA-Z0-9-]+?\\.)+

for ((i = 0; i <= 255; ++i))
{
  for ((j = 0; j <= 255; ++j))
  {
    ip=163.13.$i.$j

    name=$(nslookup $ip 8.8.8.8 |\
        egrep -o "name\s=\s$REGEX_HOST_NAME" |\
        egrep -o "$REGEX_HOST_NAME")
    echo $ip $name
  }
}

精簡吧~~

輸出大概長這樣

... (以上省略)
163.13.14.53 pc53.adsl14.tku.edu.tw.
163.13.14.54 pc54.adsl14.tku.edu.tw.
163.13.14.55 pc55.adsl14.tku.edu.tw.
163.13.14.56 pc56.adsl14.tku.edu.tw.
163.13.14.57 pc57.adsl14.tku.edu.tw.
163.13.14.58 pc58.adsl14.tku.edu.tw.
163.13.14.59 pc59.adsl14.tku.edu.tw.
163.13.14.60 pc60.adsl14.tku.edu.tw.
163.13.14.61 pc61.adsl14.tku.edu.tw.
163.13.14.62 pc62.adsl14.tku.edu.tw.
163.13.14.63 pc63.adsl14.tku.edu.tw.
163.13.14.64 pc64.adsl14.tku.edu.tw.
... (以下省略)

簡介

這段 shell script 是利用DNS反解查詢淡江大學各個 IP 對應到的主機名城
你喜歡的話也可以拿去查其他學校
(不過好像沒什麼用...)

原理

DNS

首先 淡江大學有 IP 區段 163.13.0.0/16
DNS 有分正解和反解

正解就是 host name 變 IP address
反解就是 IP address 變 host name

大部分的 IP 各家 ISP 或是擁有者會設置反解

然後再用 nslookup 指令來查詢
我這邊是像 google(8.8.8.8) 查詢 (學校的 NS 慢死了)

shell script

嗯...
這應該沒什麼好講的吧~

for loop

for ((i = 0; i <= 255; ++i))
{
}

把 stdout 存到變量

hi=$(echo hi)

pipe

echo hi | cat

egrep 用來做 regular expression

個人比較喜歡 POSIX style 的所以用 egrep
-o 參數用來單獨輸出有 match 到的內容

echo foobar | egrep -o "bar"

最後輸出~

這樣寫如果反解查不到的話也會輸出 IP

echo $ip $name

執行

這樣查會送出 65536 個請求
需要點時間
就用 nohup 來執行
最後順 redirect stdout

假設剛剛的 shell script 叫做 tku.sh
然後輸出到 tku-reverse

nohup ./tku.sh > tku-reverse &
Show Comments