设为首页 收藏本站
查看: 445|回复: 0

[经验分享] [linux,c++] 网络编程之多线程扫描服务器端口编程

[复制链接]

尚未签到

发表于 2015-12-10 08:47:05 | 显示全部楼层 |阅读模式
先把代码贴出来,详细的流程与注释明天再写
首先是服务器端的代码,程序的主体部分是客户端的多线程扫描,所以服务器端的代码编写的相对简单,没有过多的安全性检查的处理。

// my_server.cpp
// g++ my_server.cpp -o server




  • #include

  • #include
  • #include
  • #include
  • #include
  • #include
  • #include

  • int main (int c , char ** v)
  • {
  •     struct sockaddr_in server_addr ;
  •     int sockfd ;

  •     sockfd = socket ( AF_INET , SOCK_STREAM , 0 ) ;

  •         server_addr.sin_family = AF_INET ;
  •         server_addr.sin_port = htons (1027) ;
  •         inet_aton ("127.0.0.1" , &server_addr.sin_addr ) ;

  •         bind (sockfd ,(struct sockaddr*)&server_addr , sizeof(struct sockaddr_in) ) ;
  •         listen ( sockfd , 10 ) ;

  •     for (;;) {}

  •     return 0 ;
  • }

// 后面的代码均属于 client 端,使用Makefile 进行编译
// Makefile




  • CPPFLAGS = -O3

  • LDFLAGS = -lpthread

  • all: Main

  • clean :
  •     rm -f *.o

  • Main: Main.o my_scanner.o
  •     g++ -o $@ $^ $(LDFLAGS)

// my_scanner.h




  • // my_scanner.h

  • #ifndef MY_SCANNER_H
  • #define MY_SCANNER_H

  • #include
  • #include
  • #include

  • #include
  • #include
  • #include
  • #include
  • #include
  • #include

  • #include
  • #include


  • struct _scan_segment
  • {
  •    unsigned short int from_port ;
  •    unsigned short int to_port ;
  •    struct in_addr     scan_addr ;
  • } ;

  • typedef _scan_segment scanSegment ;


  • class Scanner
  • {
  •   private :
  •     std::vector pthreadList ;
  •     int threadNum ;
  •     int            connfd ;
  •     struct in_addr scan_addr ;
  •     int scan_max_port ;
  •     int        scan_len ;

  •   public :
  •     Scanner ( int _threadNum , struct in_addr _scan_addr , int _scan_max_port ) ;

  • // static    int do_scan ( struct sockaddr_in ) ;
  • //    void * scanner ( void *) ;
  •     void run ( void ) ;

  • } ;

  • #endif // my_scanner.h
// myscanner.cpp



// myscanner.cpp
#include "my_scanner.h"

using namespace std ;

static void log_info ( const char *err_info , int location )
{
    fprintf (stderr, "[error]: %s, [line]: %d\n" ,     err_info , location) ;
    perror ("exit function errinfo ") ;
    exit ( 1 ) ;
}


Scanner::Scanner ( int _threadNum , struct in_addr _scan_addr , int _scan_max_port )
{
   
    threadNum = _threadNum ;
    scan_max_port = _scan_max_port ;
   

    if ( threadNum > scan_max_port )
        threadNum = scan_max_port ;

    scan_len = scan_max_port / threadNum ;
   

    // copy addr
    scan_addr = _scan_addr ;   
   
    for ( int i = 0 ; i

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.iyunv.com/thread-148993-1-1.html 上篇帖子: laodRuner中Http协议接口编写 下篇帖子: Linux系统下查看某文件修改的时间戳
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表