• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            隨筆-167  評(píng)論-8  文章-0  trackbacks-0

            剛開始學(xué)習(xí)使用C++ BOOST庫,用BOOST ASIO網(wǎng)絡(luò)庫寫的一個(gè)簡(jiǎn)單command-line掃描器,原理是調(diào)用boost::asio::ip::tcp::socket類的connect成員函數(shù)連接目標(biāo)主機(jī)及要掃描的(TCP)端口。函數(shù)返回boost::system::error_code類型對(duì)象ec,ec對(duì)象(通過boost::system::error_code類的轉(zhuǎn)換函數(shù))可轉(zhuǎn)換成bool類型值。用語句if(ec)進(jìn)行判斷,當(dāng)端口打開connect成功,ec==false;端口關(guān)閉connect失敗,ec==true。

            connect函數(shù)原型:

            void connect(
                const endpoint_type & peer_endpoint);

            boost::system::error_code connect(
                const endpoint_type & peer_endpoint,
                boost::system::error_code & ec);

              1#include <boost/asio.hpp>
              2#include <iostream>
              3#include <cstdlib>
              4#include <vector>
              5
              6using boost::asio::ip::tcp;
              7using std::vector;
              8
              9static inline void print_port(int i);
             10static inline void print_port(int i,bool if_print_port_closed);
             11static vector<char const*>& std_split(char* const str);
             12unsigned short scaner(tcp::socket &s,tcp::resolver &r,char const *h,char const *p);
             13
             14bool if_has_underline=false;
             15
             16int main(int argc,char* argv[])
             17{
             18std::cout<<"****** Tcp Detect by m.shnenglu.com/jerry @ 7/21/2009 ******"<<std::endl;
             19if(argc!=3)
             20{
             21   std::cout<<"Usage: "<<argv[0]<<" <hostname> <port>"<<std::endl;
             22   std::cout<<"eg: "<<std::endl;
             23   std::cout<<" "<<argv[0]<<" 192.168.12.115 110-140"<<std::endl;
             24   std::cout<<" "<<argv[0]<<" 192.168.12.115 21,22,23,25,80"<<std::endl;
             25   return 1;
             26}

             27
             28try
             29{
             30   int port=0;
             31   vector<char const*> &i_ptr=std_split(argv[2]);
             32   char const *max_port="65535";
             33  
             34   boost::asio::io_service io_service;
             35   tcp::resolver resolver(io_service);
             36   tcp::socket socket(io_service);
             37   if(i_ptr.size()>0)
             38   {
             39    if(!if_has_underline)
             40    {
             41     for(int i=0;i<i_ptr.size();++i)
             42     {
             43      if(atoi(i_ptr[i])>65535 || atoi(i_ptr[i])<=0) i_ptr[i]=max_port;
             44      port=scaner(socket,resolver,argv[1],i_ptr[i]);
             45      if(port)
             46       print_port(port);
             47      else
             48       print_port(atoi(i_ptr[i]),1);
             49     }

             50    }

             51    else
             52    {
             53     int p=atoi(i_ptr[0]),p1=atoi(i_ptr[1]),tmp=0;
             54     char str[6];
             55     if(p>65535 || p<=0) p=65535;
             56     if(p1>65535 || p1<0) p1=65535;
             57     if(p>p1)
             58     {
             59      tmp=p;
             60      p=p1;
             61      p1=tmp;
             62     }

             63     for(int i=p;i<=p1;++i)
             64     {
             65      port=scaner(socket,resolver,argv[1],itoa(i,str,10));
             66      if(port)
             67       print_port(port);
             68      else
             69       print_port(i,1);
             70     }

             71    }

             72   }

             73}

             74catch(std::exception &e)
             75{
             76   std::cout<<e.what()<<std::endl;
             77   return -1;
             78}

             79
             80return 0;
             81}

             82
             83static inline void print_port(int i)
             84{
             85std::cout<<i<<"\topened\t=====> good!"<<std::endl;
             86}

             87static inline void print_port(int i,bool if_print_port_closed)
             88{
             89if(if_print_port_closed)
             90   std::cout<<i<<"\tclosed"<<std::endl;
             91else
             92   std::cout<<i<<"\topened\t=====> good!"<<std::endl;
             93}

             94
             95static vector<char const*>& std_split(char* const str)
             96{
             97//static char flag[5]="flag";
             98vector<char const*>* char_ptr_vec=new vector<char const*>();
             99unsigned count=0,length=strlen(str);
            100for(int i=0;i<length;++i)
            101{
            102   if(*(str+i)==',')
            103   {
            104    *(str+i)=0;
            105    char_ptr_vec->push_back(str+count);
            106    count=i+1;
            107   }

            108   else if(*(str+i)=='-')
            109   {
            110    *(str+i)=0;
            111    char_ptr_vec->push_back(str);
            112    count=i+1;
            113    char_ptr_vec->push_back(str+count);
            114    if_has_underline=true;
            115    //push the third element as a flag
            116    //char_ptr_vec->push_back(flag);
            117    break;
            118   }

            119}

            120
            121//if(count==0) char_ptr_vec.push_back(str);
            122char_ptr_vec->push_back(str+count);
            123return *char_ptr_vec;
            124}

            125
            126unsigned short scaner(tcp::socket &s,tcp::resolver &r,char const *h,char const *p)
            127{
            128try
            129{
            130   tcp::resolver::query query(h,p);
            131   tcp::resolver::iterator endpoint_iterator=r.resolve(query);
            132   tcp::resolver::iterator end;
            133   boost::system::error_code error=boost::asio::error::host_not_found;
            134  
            135   while(error && endpoint_iterator!=end)
            136   {
            137    s.close();
            138    s.connect(*endpoint_iterator++,error);
            139   }

            140   if(error)
            141   {
            142    return 0;
            143    //throw boost::system::error_code(error);
            144   }

            145}

            146catch(std::exception &e)
            147{
            148   std::cout<<e.what()<<std::endl;
            149   return 0;
            150}

            151
            152return atoi(p);
            153}


            posted on 2009-07-21 18:35 老馬驛站 閱讀(776) 評(píng)論(0)  編輯 收藏 引用 所屬分類: Boostprotocol
            久久精品国产亚洲7777| 久久涩综合| 国产精品99久久久久久人| 国产午夜精品久久久久免费视| 97精品久久天干天天天按摩 | 亚洲精品美女久久久久99小说| 久久久久久久免费视频| 久久99毛片免费观看不卡| 久久婷婷午色综合夜啪| 青青草国产精品久久| 国产亚洲精久久久久久无码77777| 久久久久久久尹人综合网亚洲| 久久夜色精品国产| 久久青青草原国产精品免费| 91麻豆国产精品91久久久| 91精品国产综合久久香蕉| 亚洲国产欧洲综合997久久| 欧洲性大片xxxxx久久久| 国产一区二区精品久久岳| 久久精品人人做人人妻人人玩 | 亚洲国产成人久久综合区| 996久久国产精品线观看| 亚洲中文字幕久久精品无码APP| 日韩中文久久| 久久久久国产精品嫩草影院 | 国产福利电影一区二区三区久久久久成人精品综合 | 免费久久人人爽人人爽av| 久久综合九色欧美综合狠狠| 久久亚洲高清观看| 9999国产精品欧美久久久久久| 精品无码久久久久国产| 2020久久精品国产免费| 国产欧美久久久精品| 国产精品久久久久影院色| 国产精品久久久亚洲| 97超级碰碰碰久久久久| 久久国产精品-国产精品| 狠狠久久亚洲欧美专区| 99久久精品九九亚洲精品| 久久久精品人妻无码专区不卡| 久久精品无码av|