天天看點

用shell腳本收集查詢IP資訊的網站

Curl是Linux下一個很強大的http指令行工具,其功能十分強大。

支援多種協定,包括FTP, FTPS, HTTP, HTTPS, SCP, SFTP, TFTP, TELNET等。

最簡單的用法:

抓取www.cnbeta.com的源碼并顯示

[root@club shell]# curl www.cnbeta.com  

本腳本進行過濾提取curl抓取的html源碼中的資訊,将資訊進行處理。

curl支援很多選項,-i:隻檢視http頭部資訊,-o:将擷取的結果儲存在一個檔案中

這裡不全部列出了,更詳細的介紹可以參見此博文:http://blog.51yip.com/linux/1049.html,或者man curl

本腳本功能:

實作收集可以查詢IP的網站,并将網站的域名,IP位址,和實體位址存儲顯示出來。

最終效果:

收集網頁中:

<a target="_blank" href="http://blog.51cto.com/attachment/201305/184809168.jpg"></a>

收集結束後:

<a target="_blank" href="http://blog.51cto.com/attachment/201305/185336566.jpg"></a>

腳本和注釋:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

<code>#!/bin/bash</code>

<code>#使用方式:腳本後面提供一個搜尋引擎關鍵詞,用來搜尋可以查IP的網站,比如 “IP”、“IP查詢” 等關鍵詞</code>

<code>#</code>

<code>#判斷參數是否為空,為空則提示加參數,然後退出腳本</code>

<code>[ -z $1 ] &amp;&amp; </code><code>echo</code> <code>"you must give a keyword"</code> <code>&amp;&amp; </code><code>exit</code> <code>4</code>

<code>clear</code>

<code>#此變量存儲目前檢測第幾個網頁</code>

<code>STEP=1</code>

<code>#此變量存儲搜尋關鍵詞,是腳本傳遞進來的值</code>

<code>KEYWORD=$1</code>

<code>#如果目前目錄存在info.txt則删除這個檔案</code>

<code>[ -e info.txt ] &amp;&amp; </code><code>rm</code> <code>-rf info.txt</code>

<code>echo</code> <code>"擷取本機公網位址中。。。。"</code>

<code>#此循環用來擷取公網位址,如果擷取不到則顯示擷取失敗,并再次進行擷取,如何擷取到則退出循環。</code>

<code>while</code> <code>true</code><code>;</code><code>do</code>

<code>#用curl通路http://ip.chinaz.com頁面,提取出公網IP位址。</code>

<code>MYIPADDR=`curl </code><code>"http://ip.chinaz.com/"</code> <code>2&gt;</code><code>/dev/null</code> <code>| </code><code>grep</code> <code>"您的IP:"</code> <code>| </code><code>awk</code> <code>-F </code><code>'strong|&gt;|&lt;'</code> <code>'{print $6}'</code><code>`</code>

<code>if</code> <code>[ -z $MYIPADDR ];</code><code>then</code>

<code>    </code><code>echo</code> <code>"擷取公網位址失敗"</code>

<code>else</code>

<code>    </code><code>echo</code> <code>"本機公網位址:$MYIPADDR"</code>

<code>    </code><code>break</code>

<code>fi</code>

<code>done</code>

<code>#先定義此變量,用來存儲目前搜尋頁面的最後一個頁碼</code>

<code>FINPAGE=1</code>

<code>#此變量存儲搜尋頁碼</code>

<code>PN=1</code>

<code>#目前搜尋頁小于等于目前搜尋頁的最後一個頁碼時,則進入循環。</code>

<code>while</code> <code>[ $PN -</code><code>le</code> <code>$FINPAGE ];</code><code>do</code>

<code>    </code><code>#顯示目前第幾個搜尋頁。</code>

<code>    </code><code>echo</code> <code>-e </code><code>"\033[34;1m目前第$PN搜尋頁\033[0m\n"</code>

<code>      </code> 

<code>    </code><code>#用的是360的搜尋引擎,因為百度的源碼是壓縮過的,提取字元比較困難。www.so.com/s?q=$KEYWORD&amp;pn=$PN 這個url中,q=後面是搜尋詞,pn=後面是搜尋結果的頁碼。分析一下360的搜尋頁就能看出。</code>

<code>    </code><code>#用grep和awk提取出目前頁面的最後一個頁碼。</code>

<code>    </code><code>FINPAGE=`curl </code><code>"www.so.com/s?q=$KEYWORD&amp;pn=$PN&amp;j=0"</code> <code>2&gt;</code><code>/dev/null</code> <code>| </code><code>grep</code> <code>'&lt;strong&gt;'</code> <code>| </code><code>awk</code> <code>-F </code><code>'&lt;strong&gt;|&lt;/strong&gt;'</code> <code>'{print $2}'</code><code>`</code>

<code>    </code><code>echo</code> <code>"周遊目前搜尋頁可能頁面的位址。。。"</code>

<code>    </code><code>#提取出目前搜尋頁結果的所有網頁位址。儲存在WEBLIST變量中。</code>

<code>    </code><code>WEBLIST=`curl </code><code>"http://www.so.com/s?q=$KEYWORD&amp;pn=$PN&amp;j=0"</code> <code>2&gt;</code><code>/dev/null</code> <code>| </code><code>grep</code> <code>"&lt;/h3&gt;"</code>  <code>| </code><code>awk</code> <code>-F </code><code>'href='</code> <code>'{print $2}'</code> <code>| </code><code>cut</code> <code>-d </code><code>'"'</code> <code>-f2`</code>

<code>    </code><code>echo</code> <code>-e </code><code>"周遊完成。。。開始篩選符合條件的網頁。。。\n"</code>

<code>    </code><code>#周遊目前搜尋頁的每個網頁,分析網頁中的内容。</code>

<code>    </code><code>for</code> <code>i </code><code>in</code> <code>`</code><code>echo</code> <code>$WEBLIST`; </code><code>do</code>

<code>        </code><code>#列印相關資訊。</code>

<code>        </code><code>echo</code> <code>-e </code><code>"目前檢測第\033[33;1m$STEP\033[0m個網頁,目前搜尋頁一共有`echo -e $WEBLIST | awk '{print NF}'`個網頁"</code>

<code>          </code> 

<code>        </code><code>#用curl抓取目前網頁的内容,比對一下自己的公網位址。</code>

<code>        </code><code>curl -m 5 $i 2&gt;</code><code>/dev/null</code> <code>| </code><code>grep</code> <code>$MYIPADDR &gt; </code><code>/dev/null</code>

<code>        </code><code>#如果比對到,說明此網站可以查詢IP位址資訊。</code>

<code>        </code><code>if</code> <code>[ $? -</code><code>eq</code> <code>0 ];</code><code>then</code>

<code>            </code><code>echo</code> <code>-e </code><code>"\033[32;1m$i 符合,此網站可以查詢IP資訊\033[0m"</code>

<code>              </code> 

<code>            </code><code>#提取目前網頁的域名,儲存在DONAME變量中。</code>

<code>            </code><code>DONAME=`</code><code>echo</code> <code>"$i"</code> <code>|</code><code>sed</code> <code>'s#^http://\(.*\)/*$#\1#g'</code> <code>|</code><code>cut</code> <code>-d/ -f1`</code>

<code>            </code><code>#用ping指令去解析此域名本地dns解析出來的IP位址,也就是這個可以查詢IP位址資訊網站的IP位址,儲存在WEBIPADDR變量中</code>

<code>            </code><code>WEBIPADDR=`</code><code>ping</code> <code>-c 1 -w 1 $DONAME |</code><code>cut</code> <code>-d/ -f1 | </code><code>head</code> <code>-1 | </code><code>awk</code> <code>-F </code><code>'('</code> <code>'{print $2}'</code> <code>|</code><code>cut</code> <code>-d</code><code>')'</code> <code>-f1`</code>

<code>            </code><code>#用curl在http://ip.chinaz.com上解析出此網站IP的實體位址。儲存在PHYADD變量中。</code>

<code>            </code><code>PHYADD=`curl </code><code>"http://ip.chinaz.com/?IP=$WEBIPADDR"</code> <code>2&gt;</code><code>/dev/null</code> <code>| </code><code>grep</code> <code>-A 1 </code><code>'&lt;span id="status" class="info1"&gt;'</code> <code>| </code><code>tail</code> <code>-1 | </code><code>awk</code> <code>-F </code><code>'==&gt;&gt;'</code> <code>'{print $NF}'</code> <code>| </code><code>cut</code> <code>-d </code><code>'&lt;'</code> <code>-f1`</code>

<code>            </code><code>#将相關資訊儲存在info.txt中</code>

<code>            </code><code>echo</code> <code>-e </code><code>"$DONAME\t\t\t--\t\t\t$WEBIPADDR\t\t--\t\t$PHYADD"</code> <code>&gt;&gt; info.txt</code>

<code>        </code><code>else</code>

<code>        </code><code>echo</code> <code>-e </code><code>"\033[31;1m$i 此網站pass\033[0m"</code>

<code>        </code><code>fi</code>

<code>        </code><code>let</code> <code>STEP+=1</code>

<code>    </code><code>done</code>

<code>    </code><code>let</code> <code>PN+=1</code>

<code>    </code><code>let</code> <code>FINPAGE+=1</code>

<code>#将最後的結果進行去重,儲存在result中。</code>

<code>cat</code> <code>info.txt | </code><code>sort</code> <code>| </code><code>uniq</code> <code>&gt; result.txt</code>

<code>#顯示出結果。</code>

<code>echo</code> <code>-e </code><code>"\n\n結果顯示:--------------------"</code>

<code>cat</code> <code>result.txt</code>

本文轉自lustlost 51CTO部落格,原文連結:http://blog.51cto.com/lustlost/1209349,如需轉載請自行聯系原作者