• <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  評論-8  文章-0  trackbacks-0

            剛開始學習使用C++ BOOST庫,用BOOST ASIO網絡庫寫的一個簡單command-line掃描器,原理是調用boost::asio::ip::tcp::socket類的connect成員函數連接目標主機及要掃描的(TCP)端口。函數返回boost::system::error_code類型對象ec,ec對象(通過boost::system::error_code類的轉換函數)可轉換成bool類型值。用語句if(ec)進行判斷,當端口打開connect成功,ec==false;端口關閉connect失敗,ec==true。

            connect函數原型:

            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 www.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 老馬驛站 閱讀(769) 評論(0)  編輯 收藏 引用 所屬分類: Boostprotocol
            丁香久久婷婷国产午夜视频| 无码精品久久久天天影视| 久久SE精品一区二区| 久久久久这里只有精品 | 久久精品人人做人人妻人人玩| 久久久久一本毛久久久| 久久天天躁狠狠躁夜夜不卡| 狠狠色伊人久久精品综合网| 99久久婷婷免费国产综合精品| 人妻少妇久久中文字幕| 国产精品美女久久久久| 久久久精品午夜免费不卡| 久久99国产精品久久99果冻传媒| 国产午夜精品理论片久久影视| 亚洲国产精品久久久久婷婷老年| 精品久久久久久久| 91精品国产色综久久| 看全色黄大色大片免费久久久 | 国内精品久久久久久久coent| 国产成人精品综合久久久| 欧美激情精品久久久久久久| 久久久久亚洲精品日久生情 | 国产亚州精品女人久久久久久 | 久久久久亚洲精品中文字幕 | 久久免费看黄a级毛片| 久久无码高潮喷水| av无码久久久久久不卡网站| 国産精品久久久久久久| 一本一本久久A久久综合精品| 久久精品九九亚洲精品| 久久艹国产| 99精品久久精品一区二区| 久久亚洲欧洲国产综合| 久久精品国产亚洲AV无码偷窥| Xx性欧美肥妇精品久久久久久 | 伊人热人久久中文字幕| 久久久久99这里有精品10| 久久精品九九亚洲精品天堂| 欧美成人免费观看久久| 亚洲国产精品久久66| 亚洲国产精品久久久天堂|