基于tcp connect的端口扫描程序

原理:connect()函数用于对于每一个感兴趣的目标计算机的端口进行连接,如果该端口处于侦听状态,那么connect()就会成功,即没有提供服务。如果对于每一个目标端口以串行的方式使用单独的connect()调用,需要较长的时间,我们可以通过使用非阻塞I/O设置一个较低的时间周期或者同时观察多个套接字来提高扫描速度。
这个程序实现的是扫描局域网中其他主机的IP并输出主机名和对应主机开启的端口,我获取局域网中其他主机的地址的方法是通过读取ARP缓存表,这样好像有点偷懒的嫌疑,哈哈。

环境:kali linux+gcc 6.xx

#include<stdio.h>
#include<sys/socket.h>
#include<errno.h>
#include<ctype.h>
#include<netinet/in.h>
#include<netdb.h>
#include<string.h>
#include<arpa/inet.h>
#include<stdlib.h>
#include<unistd.h>
#include<pthread.h>
#include<fcntl.h>#define MAX 65535
#define THREAD_NUM 50typedef struct IP_Message{int MinPort;int MaxPort;struct in_addr ip;
}IP_Message;void *scan(void *arg){IP_Message *IP_M;char ipaddress[36];int i;int net;int err;struct hostent *host;struct sockaddr_in sa;int ret;fd_set wset;fd_set rset;int sel;//se:lectint flags;int get;//getsockoptint error=0;socklen_t len=sizeof(error);struct timeval tval;tval.tv_sec=1;tval.tv_usec=0;IP_M=arg;memset(&sa,0,sizeof(struct sockaddr_in));sa.sin_family=AF_INET;sa.sin_addr.s_addr=IP_M->ip.s_addr;for(i=1;i<1025;i++){sa.sin_port=htons(i);if((net=socket(AF_INET,SOCK_STREAM,0))<0){perror("\nsocket");exit(2);}flags=fcntl(net,F_GETFL,0);//鑾峰彇鏂囦欢鐨刦lags鍊?fcntl(net,F_SETFL,flags|O_NONBLOCK);//璁剧疆鎴愰潪闃诲妯″紡ret=connect(net,(struct sockaddr*)&sa,sizeof(sa));if(ret==0){printf("%s   %-5d\n",inet_ntoa(sa.sin_addr),i);close(net);}else{if(errno==EINPROGRESS){FD_ZERO(&wset);FD_ZERO(&rset);FD_SET(net,&wset);FD_SET(net,&rset);sel=select(net+1,&rset,&wset,NULL,&tval);if(sel<=0||sel==2){close(net);}else if(sel==1&&FD_ISSET(net,&wset)){printf("%s   %-5d Opened!\n",inet_ntoa(sa.sin_addr),i);close(net);}else{close(net);}}}}
}void mul_scan(char *arg){int i;struct hostent *he;printf("%s :",arg);pthread_t worker_tid;IP_Message IP;IP.ip.s_addr=inet_addr(arg);he=gethostbyaddr((char *)&IP.ip.s_addr,sizeof(struct in_addr),AF_INET);if(he!=NULL)printf("%s\n",he->h_name);	elseprintf("\n");if(pthread_create(&worker_tid,NULL,scan,(void *)&IP)!=0){perror("create:");exit(1);}pthread_join(worker_tid,NULL);
}int main(){char ip[16];char buffer[100];FILE *fp;fp=fopen("/proc/net/arp","r");if(!fp){perror("fp");exit(2);}fgets(buffer,100,fp);while(!feof(fp)){fgets(ip,16,fp);if(feof(fp))break;mul_scan(ip);fgets(buffer,100,fp);}fclose(fp);return 0;
}

较为可惜的是因为时间原因没有实现多线程同时观察多个套接字。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/375982.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux如何运行多个硬盘,一个硬盘如何装两个Linux

1个硬盘已安装Fedora 8 Linux系统&#xff0c;并安装grub引导管理程序&#xff0c;现要在这个硬盘的空闲分区中安装Fedora 9&#xff0c;操作如下&#xff1a;1.将Fedora-9-i386-DVD.iso文件放到一个Windows Fat32分区((hd0,4))的根目录&#xff0c;将这个iso文件中的isolinux目…

玩转Win32开发(2):完整的开发流程

上一篇中我给各位说了一般人认为C中较为难的东西——指针。其实对于C&#xff0c;难点当然不局限在指针这玩意儿上&#xff0c;还有一些有趣的概念&#xff0c;如模板类、虚基类、纯虚函数等&#xff0c;这些都是概念性的东西&#xff0c;几乎每一本C书上都会介绍&#xff0c;而…

赞!带进度条的 jQuery 文件拖放上传插件

jQuery File Uploader 是一个 jQuery 文件拖放上传插件&#xff0c;包括 Ajax 上传和进度条效果。作者编写这个插件的想法是要保持它非常简单&#xff0c;不像其他的插件&#xff0c;很多的标记&#xff0c;并提供一些 Hack 的方式使之兼容那些古老的浏览器。jQuery File Uploa…

::范围解析运算符

学习笔记&#xff1a;参考链接 ::是范围解析运算符&#xff0c;或者称为域区分符&#xff0c;用来指明一个函数或一个数据属于哪一个类。 ::也可以不跟类名&#xff0c;表示全局函数或者全局数据 eg: #include<iostream> using namespace std;int month;//全局变量 i…

Linux下C语言串口应用编程,Linux下串口C语言编程

Linux下串口C语言编程 (5页)本资源提供全文预览&#xff0c;点击全文预览即可全文预览,如果喜欢文档就下载吧&#xff0c;查找使用更方便哦&#xff01;9.9 积分串口操作代码#include #include #include #include #include #include #include #include #include #define BUFFER…

开启linux ssh

kali linux在开机的时候ssh服务是默认关闭的&#xff0c;可通过以下方法开启服务

IOS 基于APNS消息推送原理与实现(JAVA后台)

Push的原理&#xff1a;Push 的工作机制可以简单的概括为下图图中&#xff0c;Provider是指某个iPhone软件的Push服务器&#xff0c;这篇文章我将使用.net作为Provider。APNS 是Apple Push Notification Service&#xff08;Apple Push服务器&#xff09;的缩写&#xff0c;是苹…

linux系统调用open、write、close、read以及stat函数详解

学习笔记 参考链接1 、参考链接2以及百度百科 在进行C语言学习的时候我们了解到了C语言相关的一些IO操作&#xff0c;如fopen&#xff0c;fwrite&#xff0c;fread&#xff0c;fprintf&#xff0c;fclose等相关函数&#xff0c;他们都是由C库函数提供的一些函数&#xff0c;是…

【转载】Ubuntu环境下配置Android Studio

之前学习Android开发的时候&#xff0c;一直跟各种教程一样&#xff0c;使用的是EclipseADT&#xff0c;主要是比较方便&#xff0c;容易上手&#xff0c;特别是对于习惯用Eclipse开发java的朋友来说&#xff0c;上手更是好无压力。但毕竟EclipseADT最多只能算Google的干儿子&a…

安装Discuz

1.下载Discuz 版本文件http://download.comsenz.com/DiscuzX/3.2/Discuz_X3.2_SC_GBK.zip2.下载PHPhttp://windows.php.net/downloads/releases/php-5.6.9-Win32-VC11-x64.zip把里面文件的php.ini-development 更名为php.ini Uncomment下列语句 extension_dir "ext"…

linux跑caffe模型的步骤,Caffe初步实践——使用训练好的模型完成语义分割任务

Caffe刚刚安装配置结束&#xff0c;乘热打铁&#xff01;(一)环境准备前面我有两篇文章写到caffe的搭建&#xff0c;第一篇cpu only &#xff0c;第二篇是在服务器上搭建的&#xff0c;其中第二篇因为硬件环境更佳我们的步骤稍显复杂。其实&#xff0c;第二篇也仅仅是caffe的初…

灵悟礼品网上专卖店——新建数据库

一、小组成员&#xff1a; 洪雪意&#xff08;产品负责人&#xff09; 陈淑筠&#xff08;Master&#xff09; 二、组内人员任务情况 计划完成的任务的第三个模块&#xff1a;分析并建立数据库 已完成的任务&#xff1a; 任务的第三个模块&#xff1a; 陈淑筠&#xff08;负责…

c语言大乐透编译,Excel大乐透摇号vba代码分享,说不定就中百万了呢

大家好我是Excel从零到一&#xff0c;今天闲来无聊做了一套大乐透摇号程序的vba代码分享给大家来看下效果Excel大乐透摇号vba代码分享&#xff0c;说不定就中百万了呢Sub 摇号()Dim i, a, test, s(1 To 35) As IntegerFor i 1 To 5line1: test Application.WorksheetFunction…

纸上谈兵: 堆 (heap)

纸上谈兵: 堆 (heap) 作者&#xff1a;Vamei 出处&#xff1a;http://www.cnblogs.com/vamei 欢迎转载&#xff0c;也请保留这段声明。谢谢&#xff01; 堆(heap)又被为优先队列(priority queue)。尽管名为优先队列&#xff0c;但堆并不是队列。回忆一下&#xff0c;在队列中&a…

最近用到这个强大的工具 PhysicsEditor (转)

今天收到PhysicsEditor作者发过来的license key&#xff0c;所以顺便把PhysicsEditor也尝试了一下。主要是尝试将PhysicsEditor与cocos2dx&#xff0c;box2d结合开发的一些步骤。之前大概网络检索了一下&#xff0c;知道PhysicsEditor的功能其实很简单。一句话就是给图片的边缘…

如何更新Chrome

在浏览器的地址栏中输入chrome://help即可进行自动更新&#xff0c;如下图&#xff1a;

我也要谈谈大型网站架构之系列(4)——分布式中的异步通信

我们知道在面向对象编程中&#xff0c;总会想着各种办法来实现代码的解耦&#xff0c;从而让项目中的各种人员面对自己熟悉的业务进行开发&#xff0c; 做到术业有专攻&#xff0c;比如大家非常熟悉的三层架构&#xff0c;MVC&#xff0c;MVP以及MVVM模式&#xff0c;让前端设计…

node模块函数图解

已截图方式记录模块信息&#xff1a; HTTP模块&#xff1a; 对于网络返回处理状态封装了很多种&#xff0c;我已截图展现 以上状态也是在http协议中包含的状态。 http函数&#xff1a; path模块&#xff1a; 转载于:https://www.cnblogs.com/kuailingmin/p/4547538.html

android 心跳效果动画,Android实现心跳的效果

最近再做一个教育类的项目。在做一些学习工具的时候&#xff0c;美工提出了一些要求&#xff0c;大致如下&#xff1a;其实实现过程也不难&#xff0c;大致就是对一个视图控件添加一个圆形的背景&#xff0c;然后该视图进行动画处理&#xff0c;膨胀的同时&#xff0c;透明度增…

操作系统上机作业--使用系统调用实现mycat

mycat.c的功能与系统cat程序相同mycat将指定的文件内容输出到屏幕&#xff0c;例子如下&#xff1a;要求使用系统调用open/read/write/close实现 $ cat /etc/passwd root:x:0:0:root:/root:/bin/bash daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin bin:x:2:2:bin:/bin:/u…