臨時製作的JavaScript TCP掃描器

來源:互聯網
上載者:User
臨時製作的JavaScript TCP掃描器
作者:全金屬外殼
事情起因與我在學校PC教室測試我的後門。當我把俺的後門用無敵WinRAR捆綁機和幾個秘傳小遊戲綁到一塊放到共用目錄後,突然發現忘了帶掃描器啦(學校的PC室上課時是斷網的,而我在後門配置時讓後門監聽1122連接埠,非反向串連!)。沒有掃描器,如何得知廣大同學們孰為俺的後門測試光榮奉獻了自己的。。。機器?嗚呼。不知如何是好。
偶見旁邊的MM在用寫字板打字玩,靈機一動,計上心頭。於是就有了本掃描器的誕生,可惜是單線程的,慢了點.
測試環境:windows 2000
使用工具:寫字板,Cscript.exe
使用組件:Mswinsock
我先看看機器上有沒有對winsock控制項註冊先。
    Var socket =new ActiveXObject(“MSWinsock.winsock”);
    Socket.Aboutbox();
儲存上面的代碼為“Test.js”,在命令列輸入cscript test.js出現winsock的關於對話方塊:
(圖一)
這個圖是我回家補抓的。說明winsock是可用的,這就好辦了。
    現在開始正式指令碼版連接埠掃描器編寫工作,我使用的是javascript,喜歡它的函數風格(和冰狐大哥套近乎,呵呵)。首先要想想掃描器的工作流程,我用虛擬碼描述如下:
main()
{
    初始化
    while(還有IP沒被掃)
    {
    for(i=開始連接埠;i<=結束連接埠;i++)
    {
    If (連接埠開放)
        顯示:i號連接埠開放。。
}
}
}
雖然我在編寫時使用了多個子函數,但是程式的大致流程還是這樣的。
先定義幾個全域變數:
var socket=new ActiveXObject("MSWinsock.winsock");//winsock對象

var Info="/t/t--==** Metallic Scanner v1.2 **==--/n/t/t/tmade by Metallic Shell"
var sample="Usage:/n cscript.exe MetScan.js <Begin Address> <End Address> <Begin Port> <End Port> [outTime=50]"

var beginPort=1; //開始端點口
var endPort=2; //結束連接埠
var again; //記錄掃描重複次數的變數,下面有體現
看看Main()函數。在js裡本來是沒有規定要有main函數的,但是出於習慣,我使用了C++的風格。
function Main()
{
        
        var cmdLine = WScript.Arguments;//這個對象用來取得參數
var outTime=50; //預設的逾時時間
var beginAddr="192.168.1.100"; //預設開始IP
var endAddr="192.168.1.102"; //預設結束Ip
var addrCounter; //Ip計數器
WScript.echo(Info);
        /*-----取得命令列參數------*/
        if (cmdLine.length<4 ||cmdLine.length>5)//不符合要求的參數
{
                WScript.echo("Undefine Cmd Line!/n"+sample);//顯示參數說明
return 0;
        }
        else //cmdLine.length==5
{
                outTime=cmdLine(4);
        }
        /*--------------------------*/
        //下面對變數進行初始化
beginAddr=cmdLine(0);
        endAddr=cmdLine(1);
        beginPort=cmdLine(2);
        endPort=cmdLine(3);
        addrCounter=beginAddr;
        again=outTime/10;
        socket.Protocol =0;//使用TCP協議

        WScript.echo("Metallic TCP/IP Scanner will scan the address from:/n "+beginAddr +" to "+endAddr+"./n"+"The Ports Rang is:"+beginPort+" - "+endPort);
        do
        {
                WScript.echo("Scan "+ addrCounter+":");
                WScript.echo("/tAddress: /t/tPort:/t/tState:");
                Scan(addrCounter); //用來掃描的子函數
addrCounter=Addaddr(addrCounter); //IP節點加1
}while (addrCounter!=Addaddr(endAddr))
        WScript.echo("Scan Complete!/n");
        return 0;
}
Addaddr()是用來使得IP節點+1的函數,至於Scan(addrCounter)即調用了掃描IP連接埠的子函數啦。先看看Addaddr:
function Addaddr(str)//使得Ip地址節點加1的函數
{
        var para=new Array(4);
        para=str.split(".");//對Ip地址按.分割
if (para[3].to==254)
        {
                para[3]=0;
                para[2]++;
        }
        else
        {
                para[3]++;
        }
        return (para[0]+"."+para[1]+"."+para[2]+"."+para[3]);//把分割處理的各段拼合
}
很簡單,不多說了。然後看看最重要的Scan函數:
function Scan(addr)
{
        var portCounter; //連接埠計數器
for (portCounter=beginPort;portCounter<=endPort;portCounter++)
        {
                var i=0; //內部計數
socket.Close(); //事先要關閉可能的串連,以免出錯
socket.Connect(addr,portCounter);//串連遠程主機的連接埠
while (i<again && socket.State!=9)//如果socket未出錯且沒有逾時就繼續迴圈等待,逾時就不管啦
{
                        if (socket.State==7)//如果串連上了
{
                                WScript.echo("/t"+addr+":/t/t"+portCounter+"/t/tOpen!");
                                //這裡有一段抓Bannar的代碼,但是不知為何,總是失效,就是buffer總是為空白
WScript.sleep(100);
                                if (socket.bytesReceived>0)
                                {
                                        var buffer="";
                                        socket.getdata (buffer,8);
                                WScript.echo("/tBannar:"+buffer);
                                }
                                break;
                        }
                        WScript.sleep(10);//叫它睡一會,否則你的機器的資源會被吃掉很多!
i++;
                }
        }
}
這個函數有個問題,就是抓Bannar那塊代碼,GetData後buffer總是空的,但是socket.bytesReceived在GetData後就會變成0(如果這個連接埠有資料過來按道理socket.bytesReceived>0而且buffer應該就是Bannar了),這裡鬱悶了我好久,網上也沒有提到相關資料…嗚,還望高手指教 (*_*),俺的QQ是:35076264.不過我在測試時發現用vbscript寫這段代碼就不會有問題了,大家可以用Vbs寫:
if socket.bytesReceived>0 then
            dim buffer
            buffer=””
            socket.getdata buffer,8
            WScript.echo "Bannar:"+buffer
    End if
 
怎麼樣,一個支援多IP多連接埠的掃描器就在記事本中做好了,很有成就感麼?看看,是不是很有風格?呵呵.

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.