网络编程学习--简单的端口扫描

#include <afxext.h>
#include <winsock.h>
// 编译时需使用的库
#pragma comment(lib,"wsock32.lib")
int main(int argc, char *argv[])
{
 WSADATA wsadata;
 int sock;
 int port=0;
 struct sockaddr_in server; 
 char *ip=argv[1];
 // 创建一个sock
 if (WSAStartup(MAKEWORD(1,1), &wsadata) != 0)
 {
  printf("/r/nWsatartup error");
  return -1;
 }
 for(port=23;port<600;port++)
 {
  sock = socket(AF_INET, SOCK_STREAM, 0);
  // 创建sock失败处理
  if (sock==INVALID_SOCKET)
  { 
   printf("sock error!/n");
   return -1;
  }
  // 给sock成员赋值
  server.sin_family=AF_INET;
  server.sin_addr.s_addr=inet_addr(ip);// 要扫描的地址
  server.sin_port=htons(short(port));//要扫描的端口
  /*if (ioctlsocket(sock, FIONBIO, &flag) != 0)
  {  // 设置失败处理
   printf("/r/nSock Error:%s", WSAGetLastError());
   closesocket(sock);
   return -1;
  } */
  if(connect(sock, (struct sockaddr*)&server, sizeof(server))==0)
  {
   printf("port%d is open!/n",port);
   closesocket(sock);
  }
  
  else
  {
   printf("port %d is not open!/n",port);
   closesocket(sock);
  }
 }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
信息工程学院计算机网络 课程研究报告 题目全称: 端口扫描工具设计 课 程: 计算机网络 学 号: 班 级: 姓 名: 摘要 在现在这个信息化的社会中,网络的发展已经超出了人们预想,在很短的时间里已经渗透到军事,金融,商业,交通,电信,教育等领域,并发挥着越来越大的作用。社会对网络系统的依赖也越来越强,使得密集信息和财富高度集中与计算机中。另一方面,这些网络系统都依靠计算机网络接受和处理信息,实现其相互间的联系和对目标的管理与控制。而网络端口扫描作为维护网络安全的重要手段,可以帮助服务器提供商找出自身漏洞,避免黑客攻击;测试远程服务器的端口是否可达,防止沿途运营商、防火墙限制了端口导致服务不可用。 .备注 本次计算机网络课程设计我主要是学习一下端口扫描工具的基本知识以及研究别人做出的端口扫描工具,以下即是本次研究的相关研究报告。鉴于自己计算机方面知识不是很好,不足之处还请老师指出与修正。 端口扫描器的研究 TCP协议介绍 提到端口扫描技术就不可不提及TCP协议了,作为互联网的核心协议,TCP协议的重要性是人人皆知,端口扫描主要是建立在TCP协议基础上的一门技术。TCP协议是一种面向连接的,可靠的传输协议。一次正常的TCP传输需要通过在客户和服务器之间建立特定的虚电路连接来完成,这个过程通常被称为"三次握手"。TCP通过数据分段中的序列号保证所有的传输数据可以在远端按照正常的次序重组,而通过确认保证数据传输的完整性。 三次握手过程: 1:客户端发送一个TCP包(SYN请求)给服务端,其中标记SYN(同步序号)要打开。SYN请求指明了客户端希望连接的服务器端端口号和客户端的ISN。 2:服务器端发回应答,包含自己的SYN信息ISN和对客户端的SYN应答,应答时返回下一个希望得到的字节序号。 3:客户端对从S服务器端来的SYN进行应答,数据发送开始。 UDP协议介绍 UDP,用户数据报协议。UDP为应用程序提供了一种方法来发送经过封装的IP数据报,而且不必建立连接就可以发送这些IP数据报。 UDP传输的数据段是由8个字节的头和净荷域构成的。两个端口分别被用来标识出源机器和目标机器内部的端点。当一个UDP分组到来的时候,它的净荷部分被递交给与目标端口相关联的那个进程。当目标端口必须将一个应答送回给源端口的时候,源端口是必须的。发送应答的进程只要将近来的数据段中的源端口域复制到输出的数据段中的目标端口域,就可以指定在发送机器上有哪个进程来接受应答。UDP长度包含了8字节的头和数据部分。UDP校验和是可选的,如果不计算的话,则在该域中存放0,如果真正的计算结果试的话,则该域中存放的全是1,除非数据 的质量并不重要,否则就不应该将校验和的功能关闭。另外值得明确提出来的是UDP没有做到的一些事情。UDP并不考虑流控制,错误控制,在收到一个坏的数据段之后它也不重传。所有这些工作都留给用户的进程。UDP所作的事情是提供一个接口,并且 接口中增加解复用的特性。他利用端口的概念将数据段解复用到多个进程中,这就是他所做的全部工作。 SOCKET介绍 Socket接口是TCP/IP网络的API,Socket接口定义了许多函数或例程,程序员可以用它们来开发TCP/IP网络上的应用程序。要学Internet上的TCP/IP网络编程,必须理解Socket接口。 Socket接口设计者最先是将接口放在Unix操作系统里面的。如果了解Uinx系统的输入和输出的话,就很容易了解Socket了。网络的Socket数据传输是一种特殊的I/O,Socket也是一种文件描述符。Socket也具有一个类似于打开文件的函数调用Socket(),该函数返回一个整型的Socket描述符,随后的连接建立,数据传输等操作都是通过该Socket实现的。 Sockfd是需要关闭的socket的描述符。参数 how允许为shutdown操作选择以下几种方式: ·0-------不允许继续接收数据 ·1-------不允许继续发送数据 ·2-------不允许继续发送和接收数据,均为允许则调用close ()   shutdown在操作成功时返回0,在出现错误时返回-1并置相应errno。 常用端口扫描技术 TCP connect()扫描: 这是最基本的TCP扫描,操作系统提供的connect()系统调用可以用来与每一个感兴趣的目标计算机的端口进行连接。如果端口处于侦听状态,那么connect()就能成功。否则,这个端口是不能用的,即没有提供服务。这个技术的一个最大的优点是,你不需要任何权限。系统中的任何用户都有权利使用这个调用。另一个好处就是速度,如果对每个目标端口以线性的方式,使用单独的connect()调用,那么将会花费相当长的时间,使用者可以通过同时打开多个套接字来加速扫描。使用非阻
X-scan 安全焦点出品的国内很优秀的扫描工具,采用多线程方式对指定IP地址段(或单机)进行安全漏洞检测,支持插件功能,提供了图形界面和命令行两种操作方式。 流光 国人的骄傲,由高级程序员小榕编写的一款强悍的扫描器。大家都知道。就不介绍了。 X-way 一款优秀功能多线程扫描工具。也都应该用过。不作介绍了。 Nmap 这个就厉害了,安全界人人皆知的非常有名气的一个扫描器!作者Fyodor. Domain 集WHOIS查询、上传页面批量检测、木马上传、数据库浏览及加密解密于一体. SuperScan 强大的TCP端口扫描器、Ping和域名解析器! Hscan 这是款运行在WinNT/2000下的漏洞扫描工具,有GUI以及命令行两种扫描方式! WIN2K自动攻击探测机 WinNT/2000自动攻击探测机。 4899空口令探测 能够快速的扫描到被安装了radmin服务端4899端口的空口令IP! SHED 一个用来扫描共享漏洞的机器的工具! Hscan 这是款运行在Win NT/2000下的漏洞扫描工具,有GUI以及命令行两种扫描方式! Blue's port scan 一款绿色的扫描软件,速度很快。 WebDAVScan 针对WEBDAV漏洞的扫描工具! X-scan - X-Scan的使用方法 这里使用x-scanner作为介绍对象,原因是x-scanner集成了多种扫描功能于一身,它可以采用多线程方式对指定IP地址段(或独立IP地址)进行安全漏洞扫描,提供了图形界面和命令行两种操作方式,扫描内容包括:标准端口状态及端口banner信息、CGI漏洞、RPC漏洞、SQL-SERVER默认帐户、FTP弱口令,NT主机共享信息、用户信息、组信息、NT主机弱口令用户等。扫描结果保存在/log/目录中,index_*.htm为扫描结果索引文件。对于一些已知的CGI和RPC漏洞,x-scanner给出了相应的漏洞描述、利用程序及解决方案,节省了查找漏洞介绍的时间。 首先x-scanner包括了两个运行程序:xscann.exe和xscan_gui.exe,这两个程序分别是扫描器的控制台版本和窗口版本,作为初学者可能更容易接受窗口版本的扫描软件,因为毕竟初学者使用最多的还是“应用程序”,无论运行那一个版本,他们的功能都是一样的。首先让我们运行窗口版本看看:窗口分为左右两部分,左面是进行扫描的类型,这包括前面提到的漏洞扫描端口扫描等基本内容;另一部分是有关扫描范围的设定,xscanner可以支持对多个IP地址的扫描,也就是说使用者可以利用xscanner成批扫描多个IP地址,例如在IP地址范围内输入211.100.8.1-211.100.8.255就会扫描整个C类的255台服务器(如果存在的话),这样黑客可以针对某一个漏洞进行搜索,找到大范围内所有存在某个漏洞的服务器。当然如果只输入一个IP地址,扫描程序将针对单独IP进行扫描。 剩下的端口设定在前面已经介绍过,一般对于网站服务器,这个端口选取80或者8080,对于某些特殊的服务器也许还有特殊的端口号,那需要通过端口扫描进行寻找。多线程扫描是这个扫描器的一大特色,所谓多线程就是说同时在本地系统开辟多个socket连接,在同一时间内扫描多个服务器,这样做的好处是提高了扫描速度,节省时间,根据系统的资源配置高低,线程数字也可以自行设定(设定太高容易造成系统崩溃)。 在图形界面下我们看到了程序连接地址“.\xscan.exe”,这实际上就是xscanner的控制台程序,也就是说图形窗口只是将控制台扫描器的有关参数设置做了“傻瓜化”处理,程序运行真正执行的还是控制台程序。因此学习控制台是黑客所必需的,而且使用控制台模式的程序也是真正黑客喜爱的操作方式。 现在我们进行一个简单的cgi漏洞扫描,这次演练是在控制台模式下进行的:xscan 211.100.8.87 -port 这个命令的意思是让xscanner扫描服务器211.100.8.87的开放端口扫描器不会对65535个端口全部进行扫描(太慢),它只会检测网络上最常用的几百个端口,而且每一个端口对应的网络服务在扫描器中都已经做过定义,从最后返回的结果很容易了解服务器运行了什么网络服务。扫描结果显示如下: Initialize dynamic library succeed. Scanning 211.100.8.87 ...... [211.100.8.87]: Scaning port state ... [211.100.8.87]: Port 21 is listening!!! [211.100.8.87]: Port 25 is listening!!! [211.100.8.87]: Port 53 is listening!!! [211.100.8.87]: Port 79 is listening!!! [211.100.8.87]: Port 80 is listening!!! [211.100.8.87]: Port 110 is listening!!! [211.100.8.87]: Port 3389 is listening!!! [211.100.8.87]: Port scan completed, found 7. [211.100.8.87]: All done. 这个结果还会同时在log目录下生成一个html文档,阅读文档可以了解发放的端口对应的服务项目。从结果中看到,这台服务器公开放了七个端口,主要有21端口用于文件传输、80端口用于网页浏览、还有110端口用于pop3电子邮件,如此一来,我们就可以进行有关服务的漏洞扫描了。(关于端口的详细解释会在后续给出) 然后可以使用浏览看看这个服务器到底是做什么的,通过浏览发现原来这是一家报社的电子版面,这样黑客可以继续对服务器进行漏洞扫描查找服务器上是否存在perl漏洞,之后进行进一步进攻。 漏洞扫描的道理和端口扫描基本上类似,例如我们可以通过扫描器查找61.135.50.1到61.135.50.255这255台服务器上所有开放了80端口的服务器上是否存在漏洞,并且找到存在什么漏洞,则可以使用xscan 61.135.50.1-61.135.50.255 -cgi进行扫描,因为结果比较多,通过控制台很难阅读,这个时候xscanner会在log下生成多个html的中文说明,进行阅读这些文档比较方便。 二、扫描器使用问题: 载使用漏洞扫描器的过程中,学习者可能会经常遇到一些问题,这里给出有关问题产生的原因和解决办法。扫描器的使用并不是真正黑客生涯的开始,但它是学习黑客的基础,所以学习者应该多加练习,熟练掌握手中使用的扫描器,了解扫描器的工作原理和问题的解决办法。 1、为什么我找不到扫描器报告的漏洞? 扫描器报告服务器上存在某个存在漏洞的文件,是发送一个GET请求并接收服务器返回值来判断文件是否存在,这个返回值在HTTP的协议中有详细的说明,一般情况下“200”是文件存在,而“404”是没有找到文件,所以造成上面现象的具体原因就暴露出来了。 造成这个问题的原因可能有两种:第一种可能性是您的扫描器版本比较低,扫描器本身存在“千年虫”问题,对于返回的信息扫描器在判断的时候,会错误的以为时间信息2000年x月x日中的200是“文件存在”标志,这样就会造成误报; 另外一种可能性是服务器本身对“文件不存在”返回的头部信息进行了更改,如果GET申请的文件不存在,服务器会自动指向一个“没有找到页面”的文档,所以无论文件是否存在,都不会将“404”返回,而是仍然返回成功信息,这样做是为了迷惑漏洞扫描器,让攻击者不能真正判断究竟那个漏洞存在于服务器上。 这一问题的解决办法也要分情况讨论,一般说来第一种情况比较容易解决,直接升级漏洞扫描器就可以了,对于第二种情况需要使用者对网络比较熟悉,有能力的话可以自己编写一个漏洞扫描器,自己编写的扫描器可以针对返回文件的大小进行判断,这样就可以真正确定文件是否存在,但这种方法对使用者的能力要求较高。 2、我使用的扫描器速度和网络速度有关系嘛? 关系不大。扫描器发送和接收的信息都很小,就算是同时发送上百个GET请求一般的电话上网用户也完全可以做得到,影响扫描器速度的主要因素是服务器的应答速度,这取决于被扫描服务器的系统运行速度。如果使用者希望提高自己的扫描速度,可以使用支持多线程的扫描器,但是因为使用者本地电脑档次问题,也不可能将线程设置到上百个,那样的话会造成本地系统瘫痪,一般使用30个线程左右比较合适。 另外对于很多网络服务器来说,为了防止黑客的扫描行为,可能会在防火墙上设置同一IP的单位时间GET申请数量,这样做目的就是避免黑客的扫描和攻击,所以在提高本地扫描速度之前,应该先确认服务器没有相应的过滤功能之后再使用。 3、扫描器报告给我的漏洞无法利用是什么原因? 确切地说扫描器报告的不是“找到的漏洞”,而是找到了一个可能存在漏洞的文件,各种网络应用程序都可能存在漏洞,但是在更新版本的过程中,老版本的漏洞会被修补上,被扫描器找到的文件应该经过手工操作确认其是否是存在漏洞的版本,这可以通过阅读网络安全网站的“安全公告”获得相应知识。 对于已经修补上漏洞的文件来说,也不代表它一定不再存有漏洞,而只能说在一定程度上没有漏洞了,也许在明天,这个新版本的文件中又会被发现还存在其他漏洞,因此这需要网络安全爱好者时刻关注安全公告。当然如果攻击者或者网络管理员对编程比较熟悉,也可以自己阅读程序并力图自己找到可能的安全隐患,很多世界著名的黑客都是不依靠他人,而是自己寻找漏洞进行攻击的。 4、扫描器版本比较新,然而却从来没有找到过漏洞是什么原因? 有一些扫描器专门设计了“等待时间”,经过设置可以对等待返回信息的时间进行调整,这就是说在“网络连接超时”的情况下,扫描器不会傻傻的一直等待下去。但如果你的网络速度比较慢,有可能造成扫描器没有来得及接收返回信息就被认为“超时”而越了过去继续下面的扫描,这样当然是什么也找不到啦。 如果问题真的如此,可以将等待时间设置的长一些,或者换个ISP拨号连接。 5、扫描器报告服务器没有提供HTTP服务? 网络上大多数HTTP服务器和漏洞扫描器的默认端口都是80,而有少量的HTTP服务器并不是使用80端口提供服务的,在确认服务器的确开通了网站服务的情况下,可以用端口扫描器察看一下对方究竟使用什么端口进行的HTTP服务,网络上常见的端口还有8080和81。 另外这种情况还有一种可能性,也许是使用者对扫描器的参数设置不正确造成的,很多扫描器的功能不仅仅是漏洞扫描,有可能还提供了rpc扫描、ftp默认口令扫描和NT弱口令扫描等多种功能,因此在使用每一款扫描器之前,都应该自己阅读有关的帮助说明,确保问题不是出在自己身上。 6、扫描器使用过程中突然停止响应是为什么? 扫描器停止响应是很正常的,有可能是因为使用者连接的线程过多,本地系统资源不足而造成系统瘫痪、也可能是因为对方服务器的响应比较慢,依次发送出去的请求被同时反送回来而造成信息阻塞、还有可能是服务器安装了比较恶毒的防火墙,一旦察觉有人扫描就发送特殊的数据报回来造成系统瘫痪…… 因此扫描器停止响应不能简单的说是为什么,也没有一个比较全面的解决方案,不过一般情况下遇到这种问题,我建议你可以更换其他扫描器、扫描另外一些服务器试试,如果问题还没有解决,就可能是因为扫描器与你所使用的系统不兼容造成的,大多数基于微软视窗的漏洞扫描器都是运行在Windows9X下的,如果是Win2000或者NT也有可能造成扫描器无法正常工作。 7、下载回来的扫描器里面怎么没有可执行文件? 扫描器不一定非要是可执行的exe文件,其他例如perl、CGI脚本语言也可以编写扫描器,因此没有可执行文件的扫描器也许是运行在网络服务器上的,这种扫描器可以被植入到网络上的其它系统中,不需要使用者上网就能够24小时不停的进行大面积地址扫描,并将结果整理、分析,最后通过Email发送到指定的电子信箱中,因此这是一种比较高级的扫描器,初学者不适合使用。 另外注意载下在扫描器的时候注意压缩报文件的扩展名,如果是tar为扩展名,那么这个扫描器是运行在Linux系统下的,这种其它操作平台的扫描器无法在视窗平台下应用,文件格式也和FAT32不一样。 8、扫描器只报告漏洞名称,不报告具体文件怎么办? 只要漏洞被发现,网络安全组织即会为漏洞命名,因此漏洞名称对应的文件在相当广泛的范围内都是统一的,只要知道了漏洞的名称,黑客就可以通过专门的漏洞搜索引擎进行查找,并且学习到与找到漏洞相关的详细信息。这种“漏洞搜索引擎”在网络上非常多,例如我国“绿盟”提供的全中文漏洞搜索引擎就是比较理想的一个。
### 回答1: x-scan扫描器是一种基于Java语言开发的网络漏洞扫描器,其源码是通过开源方式提供给用户的。该源码主要涉及网络通信、协议解析、漏洞检测等方面的技术,使用者可以基于源码进行定制化开发,满足特定的需求。 源码中,主要包括了以下几个部分: 1. 网络通信模块:负责与目标主机进行网络通信,包括TCP连接、HTTP请求等。 2. 协议解析模块:针对各种网络协议进行解析,获取协议的具体信息,如HTTP响应头、DNS解析结果等。 3. 漏洞检测模块:结合已有的漏洞库,对目标主机进行漏洞扫描,并输出相应的扫描结果。 4. 数据存储模块:将扫描结果保存到数据库或文件中,使得用户可以进行统计分析和后续处理。 总之,x-scan扫描器源码在实现网络漏洞扫描方面具有一定的技术含量,用户可以根据自己的需求对其进行二次开发,提升其性能和应用范围。同时,用户在使用时也需要遵守相关的法律法规,避免对他人造成无意义的损失。 ### 回答2: X-Scan扫描器是一款免费的网络安全扫描工具,可以用于检测网络主机是否存在漏洞,并提供一些安全建议。它是基于Perl语言开发的,可以跨平台运行。X-Scan使用可编程的插件来增强其扫描功能,如高级 HTTP/CGI 检测、漏洞扫描、字典攻击等,可以扫描大量的网络协议,如FTP、SMTP、Telnet等。 X-Scan的源码可以在GitHub上找到,可以根据自己的需要定制安全扫描器。X-Scan的源码结构清晰,易于理解和修改。它的扫描模块和插件都可以自由添加或修改,而且可以通过简单的Perl脚本实现。可以根据不同的需要,自定义和增强扫描器的功能。 X-Scan扫描器源码的优势在于其灵活性和可扩展性。通过添加新的扫描模块和插件,可以快速适应新的安全威胁。而且,X-Scan的源码结构清晰,易于理解和修改,使开发人员可以快速进行二次开发和定制。 但是要注意,在使用X-Scan的源码进行开发时,需要对网络安全有一定的了解和经验。 ### 回答3: x-scan扫描器是一种网络安全工具,它可以通过扫描网络中的端口、协议等信息,发现网络中存在的安全隐患,帮助管理员及时排除漏洞。而x-scan扫描器源码,指的是这个安全工具的程序代码,是开发者为了让更多人了解其工作原理而公开的。 x-scan扫描器源码可以帮助用户学习网络安全方面的知识,特别是如何使用扫描器来保护网络安全。通过观察源码中的算法、代码注释等信息,可以深入理解扫描器的工作方式和原理。用户可以学习如何在掌握一些基本的网络知识后,自行开发或改进安全工具,提高对网络安全的防御能力。 同时,x-scan扫描器源码也是用来操作扫描的,通过关注源码中的检测技术,了解威胁、漏洞、攻击、欺骗等方面的知识,可以识别出一些潜在的安全隐患。有助于管理员及时排除漏洞,以提高网络系统的安全性。 因此,学习x-scan扫描器源码不仅可以提高用户的网络安全意识,还有助于提高技术能力和应对网络攻击的能力。在使用和学习的过程中,用户需要遵守相关的法律法规,以保障网络安全和个人隐私的安全。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值