精华内容
下载资源
问答
  • [转载]简单实现C多线程端口扫描核心代码
    2021-05-22 17:37:18

    最近想写一个自己的端口扫描器,主要为了方便扫描“自定义”端口,上网找了一下没找到现成的代码,自己就写了个测试代码。主要实现了:对指定IP进行扫描,自定义线程数,设置扫描端口的范围。以下程序没有多余的代码只是用来做功能测试。

    #include

    #include

    #pragma comment(lib,"Ws2_32.lib")

    WSADATA wsaData;

    SOCKADDR_IN sockaddr;

    int curport;

    void scan(int i)

    {

    SOCKET Socket;

    int e;

    Socket=socket(AF_INET,SOCK_STREAM,0);

    sockaddr.sin_port=htons(i);

    printf("Connecting %d port.r",i);

    e=connect(Socket,(LPSOCKADDR)&sockaddr,sizeof(SOCKADDR_IN));

    if (e==SOCKET_ERROR)

    {

    closesocket(Socket);

    return;

    }

    printf("Found port >%d<

    open!n",i);

    closesocket(Socket);

    }

    DWORD WINAPI ThreadFunc( LPVOID lpParam )

    {

    scan((int)lpParam);

    return 0;

    }

    int main(int argc, char *argv[])

    {

    DWORD dwThreadId;

    WORD wVersionRequest=MAKEWORD(2,2);

    WSAStartup(wVersionRequest,&wsaData);

    sockaddr.sin_family=AF_INET;

    sockaddr.sin_addr.S_un.S_addr=inet_addr("192.168.0.18");

    //要扫描的IP

    int bport,eport,curip,threads,tport,intp,modp;

    threads=200; //线程数

    bport=1; //起始端口

    eport=10000; //结束端口

    curport=bport;

    tport=eport-bport;

    intp=tport / threads;

    modp=tport % threads;

    if(tport

    threads=tport;

    for(int j=0;j

    {

    if (j==intp)

    {

    threads=modp+1;

    }

    for(int i=0;i

    {

    CreateThread(NULL,0,ThreadFunc,(LPVOID)curport,0,&dwThreadId);

    Sleep(5);

    }

    }

    WSACleanup();

    return 0;

    }

    VS2005下编译成功!

    更多相关内容
  • 第一、原理端口扫描的原理很简单,就是建立socket通信,切换不通端口,通过connect函数,如果成功则代表端口开发者,否则端口关闭。所有需要多socket程序熟悉,本内容是在window环境下的第二、线程实现方式// ...

    第一、原理

    端口扫描的原理很简单,就是建立socket通信,切换不通端口,通过connect函数,如果成功则代表端口开发者,否则端口关闭。

    所有需要多socket程序熟悉,本内容是在window环境下的

    第二、单线程实现方式

    // PortScanf.cpp : 定义控制台应用程序的入口点。

    //

    #define WIN32_LEAN_AND_MEAN

    #include "stdafx.h"

    #include

    #pragma comment(lib, "Ws2_32")

    int scant(char *Ip, int StartPort, int EndPort)

    {

    WSADATA wsa;

    SOCKET s;

    struct sockaddr_in server;

    int CurrPort; //当前端口

    int ret;

    WSAStartup(MAKEWORD(2, 2), &wsa); //使用winsock函数之前,必须用WSAStartup函数来装入并初始化动态连接库

    server.sin_family = AF_INET; //指定地址格式,在winsock中只能使用AF_INET

    server.sin_addr.s_addr = inet_addr(Ip); //指定被扫描的IP地址

    for (CurrPort = StartPort; CurrPort <= EndPort; CurrPort++)

    {

    s = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);

    server.sin_port = htons(CurrPort); //指定被扫描IP地址的端口号

    ret = connect(s, (struct sockaddr *)&server, sizeof(server)); //连接

    if (0 == ret) //判断连接是否成功

    {

    printf("%s:%d Success O(∩_∩)O~~\n", Ip, CurrPort);

    closesocket(s);

    }

    else {

    printf("%s:%d Failed\n", Ip, CurrPort);

    }

    }

    printf("Cost time:%f second\n", CostTime); //输出扫描过程中耗费的时间

    WSACleanup(); //释放动态连接库并释放被创建的套接字

    return 1;

    }

    int main()

    {

    scant("127.0.0.1", 75, 100);

    return 0;

    }

    186218bfb322e1f5927b84929a47182c.png

    第三、多线程实现方式

    由于单线程执行速度有些慢,我们加入多线程运行,

    typedef struct _tagValue

    {

    int start;

    int end;

    }PortNums;

    void _cdecl beginThreadFunc1(LPVOID lpParam) {

    PortNums *pnInt = (PortNums*)lpParam;

    scan("127.0.0.1", pnInt->start, pnInt->end);

    }

    int a()

    {

    PortNums m1;

    m1.start = 70;

    m1.end = 500;

    PortNums m2;

    m2.start = 501;

    m2.end = 1000;

    _beginthread(beginThreadFunc1, 0, &m1);

    _beginthread(beginThreadFunc1, 0, &m2);

    getchar();

    return 0;

    }

    注意需要#include

    bfd19b80632b26eedae6952f388ea65b.png

    以上这篇c++ 端口扫描程序实现案例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

    展开全文
  • PAGE主机端口扫描程序设计摘 要计算机信息网络的发展加速了信息化时代的进程,但是随着社会网络化程度的增加,对计算机网络的依赖也越来越大,网络安全问题也日益明显。端口扫描技术是发现安全问题的重要手段之一。...

    PAGE

    主机端口扫描程序设计

    摘 要

    计算机信息网络的发展加速了信息化时代的进程,但是随着社会网络化程度的增加,对计算机网络的依赖也越来越大,网络安全问题也日益明显。端口扫描技术是发现安全问题的重要手段之一。

    本程序是在Windows系统中使用C语言用MFC完成的一个端口扫描程序。此程序主要完成了TCP connect()扫描和UDP扫描功能。TCP扫描支持多线程,能对单个指定的主机进行扫描或对指定网段内的主机进行逐个扫描。能扫描特定的部分端口号或对指定的端口段内的端口进行逐个扫描。此端口扫描程序能快速地进行TCP扫描,准确地检测出对TCP协议开放的端口。而对于UDP扫描只支持单线程,速度较慢。扫描结果以列表的形式直观地展现出来。

    关键词:端口扫描、TCP扫描、UDP扫描、TCP多线程扫描

    目 录

    TOC \o "1-3" \h \z \u 1引言 1

    1.1课题的背景及意义 1

    1.2端口扫描现状 1

    2系统设计 1

    2.1系统主要目标 1

    2.2开发环境及工具 1

    2.3功能模块与系统结构 2

    3系统功能程序设计 4

    3.1获取本机IP 4

    3.2分割字符串函数的实现 4

    3.3获取待扫描的IP地址 5

    3.4获取待扫描的端口号 5

    3.4.1 指定端口号的初始化 6

    3.4.2 指定端口号的保存 7

    3.5TCP connect() 扫描 8

    3.5.1 基本原理 8

    3.5.2 扫描多个主机多端口多线程的实现 8

    3.5.3 扫描结果的显示 9

    3.6UDP扫描 10

    3.6.1 基本原理 10

    3.6.2 计算效验和 11

    3.6.3 发送UDP数据包 11

    3.6.4 接收ICMP数据包 12

    4测试报告 12

    4.1TCP扫描检测 12

    4.1.1扫描本机 12

    4.1.2扫描网络中其他主机 13

    4.1.3 扫描IP段 13

    4.2UDP扫描检测 14

    4.2.1 扫描本机 14

    4.1.2扫描网络中其他主机 15

    4.3TCP、UDP一起扫描 16

    结 论 17

    参考文献 17

    第 PAGE 17 页 共 17 页

    引言

    课题的背景及意义

    网络中每台计算机犹如一座城堡,这些城堡中,有些是对外完全开放的,有些却是大门紧闭的。入侵者们是如何找到,并打开它们的城门呢?这些城门究竟通向何处?

    在网络中,把这些城堡的“城门”称之为计算机的“端口”。端口扫描是入侵者搜索信息的几种常用方法之一,也正是这一种方法最容易暴露入侵者的身份和意图。一般说来,扫描端口有以下目的:

    判断目标主机上开放了哪些服务

    判断目标主机的操作系统

    如果入侵者掌握了目标主机开放了哪些服务,运行何种操作系统,他们就能使用相应的手段实现入侵。而如果管理员先掌握了这些端口服务的安全漏洞,就能采取有效的安全措施,防范相应的入侵。

    端口扫描现状

    计算机信息网络的发展加速了信息化时代的进程,但是随着社会网络化程度的增加,对计算机网络的依赖也越来越大,网络安全问题也日益明显。端口扫描技术是发现安全问题的重要手段之一。一个端口就是一个潜在的通信通道,也就是一个入侵通道。对目标计算机进行端口扫描,能得到许多有用的信息。扫描器通过选用远程TCP/IP不同的端口的服务,并记录目标给予的回答,通过这种方法,可以搜集到很多关于目标主机的各种有用的信息,从而发现目标机的某些内在的弱点。

    系统设计

    系统主要目标

    本程序主要实现了:

    简易的TCP connect()扫描,支持多线程;

    UDP扫描功能;

    能对单个指定的主机进行扫描或扫描指定网段内的主机;

    能扫描特定的部分端口号或对指定的端口段内的端口进行逐个扫描;

    开发环境及工具

    测试平台:Windows XP Professional

    使用软件:Visual C++ 6.0

    开发语言:C语言

    功能模块与系统结构

    作为端口扫描程序,首先需要完成的功能就是对于系统操作系统的服务端口进行扫描,返回扫描结果。对于端口的扫描,包括对于本机系统服务端口,局域网内目标机系统,以及远程IP的系统服务端口进行扫描。

    有些时候,用户并不需要去扫描整个系统的所有端口,因为这样的话不仅会浪费大量的时间,而且可能导致难以找到自己需要了解的端口的扫描结果。所以,对于选择性地对端口进行扫描也非常重要。这当然也是扫描程序需要实现的功能之一。

    用户在等待扫描的时候,往往希望知道它的工作进度。这样用户可以更好地控制自己的操作。站在用户的角度思考,

    展开全文
  • udp端口扫描-报告

    2021-06-07 09:38:40
    《udp端口扫描-报告》由会员分享,可在线阅读,更多相关《udp端口扫描-报告(17页珍藏版)》请在人人文库网上搜索。1、网络协议分析利用UDP进行主机端口扫描专 业: 班 级: 姓 名: 学 号: 日 期: 目 录1. 任务题目...

    《udp端口扫描-报告》由会员分享,可在线阅读,更多相关《udp端口扫描-报告(17页珍藏版)》请在人人文库网上搜索。

    1、网络协议分析利用UDP进行主机端口扫描专 业: 班 级: 姓 名: 学 号: 日 期: 目 录1. 任务题目及要求11.1 任务简介11.2 任务要求12. 课题成员及分工13. 相关知识简介23.1 课题的背景及意义23.2 关键技术23.3 关键API函数33.3.1. WSAStarup函数33.3.2. WSACleanup函数33.3.3. socket函数33.3.4. closesocket函数43.3.5. sendto函数43.3.6. recvfrom函数43.3.7. bind函数44. 系统设计64.1 主要目标64.2 开发环境及工具64.3 功能模块与系统结构65.。

    2、 UDP扫描的实现85. 1 基本原理85.2 计算效验和95.3 发送UDP数据包95.4 接收ICMP数据包106. UDP扫描检测137. 心得体会14参 考 文 献151. 任务题目及要求1.1 任务简介UDP是TCP/IP协议族伟传输层设计的两个协议之一,它在进程与进程的通信过程中,提供了有限的差错校验功能,是一种无连接的,不可靠的协议。UDP在一个较低的水平上完成进程之间的通信,在收到分组的时候没有流量控制机制也没有确认机制,适用于可靠性比较高的局域网。由于UDP采用无连接的方式,因此协议简单,在一些特定的应用中协议运行效率高。本次课程设计的目的主要是了解UDP协议的网络传输过程中。

    3、的一些原理。1.2 任务要求编写一个简单的主机端口扫描程序,要求能够探测目的主机的端口状态。具体要求:(1)要求用户可以在参数中输入需要扫描的目的主机的IP地址与端口,输出端口的状态信息。(2)要求使用UDP协议进行端口的扫描过程。(3)有良好的编程规范与注释信息。2. 课题成员及分工本课题组员:周均负责全部工作。3. 相关知识简介3.1 课题的背景及意义网络中每台计算机犹如一座城堡,这些城堡中,有些是对外完全开放的,有些却是大门紧闭的。入侵者们是如何找到,并打开它们的城门呢?这些城门究竟通向何处?在网络中,把这些城堡的“城门”称之为计算机的“端口”。端口扫描是入侵者搜索信息的几种常用方法之一。

    4、,也正是这一种方法最容易暴露入侵者的身份和意图。一般说来,扫描端口有以下目的:判断目标主机上开放了哪些服务判断目标主机的操作系统如果入侵者掌握了目标主机开放了哪些服务,运行何种操作系统,他们就能使用相应的手段实现入侵。而如果管理员先掌握了这些端口服务的安全漏洞,就能采取有效的安全措施,防范相应的入侵。计算机信息网络的发展加速了信息化时代的进程,但是随着社会网络化程度的增加,对计算机网络的依赖也越来越大,网络安全问题也日益明显。端口扫描技术是发现安全问题的重要手段之一。一个端口就是一个潜在的通信通道,也就是一个入侵通道。对目标计算机进行端口扫描,能得到许多有用的信息。扫描器通过选用远程TCP/I。

    5、P不同的端口的服务,并记录目标给予的回答,通过这种方法,可以搜集到很多关于目标主机的各种有用的信息,从而发现目标机的某些内在的弱点。3.2 关键技术UDP 是User Datagram Protocol的简称, 中文名是用户数据包协议,是 OSI 参考模型中一种无连接的传输协议,提供面向事务的简单不可靠信息传送服务,IETF RFC 768是UDP的正式规范。在大多数情况下,当向一个未开放的UDP 端口发送数据时,其主机就会返回一个ICMP不可到达(ICMP PORT UNREACHABLE)的错误,因此大多数UDP 端口扫描的方法就是向各个被扫描的UDP 端口发送零字节的UDP 数据包,如果。

    6、收到一个ICMP 不可到达的回应,那么则认为这个端口是关闭的,对于没有回应的端口则认为是开放的。可是由于大部分系统都限制了ICMP 差错报文的产生速度,所以针对特定主机的UDP 大量端口扫描速度缓慢,此外由于UDP 协议和ICMP 协议都是不可靠协议,所以未收到回应可能由于数据包未送达造成,所以扫描程序需要针对同一端口多次尝试后才能确定其状态。3.3 关键API函数3.3.1. WSAStarup函数WSAStarup函数的格式如下:int WSAStarup(WORD wVersionRequested, LPWSADATA lpWSAData ); 程序在使用Socket之前必须使用WSA。

    7、Starup函数。该函数的第一个参数wVersionRequested:一个WORD(双字节)型数值,指定了应用程序需要使用的Winsock规范的最高版本 ;第二个参数lpWSAData: 指向WSADATA数据结构的指针,用来接收Windows Sockets实现的细节。函数执行成功后返回0.3.3.2. WSACleanup函数WSACleanup函数的格式如下:int WSACleanup(void);程序在完成对请求的Socket库的使用后,要调用WSACleanup函树来解除与Socket库的绑定并且释放Socket库所占用的系统资源。3.3.3. socket函数socket函数格。

    8、式为:socket(int af,int type,int protocol)第一个参数指定应用程序使用的通信协议的协议族,对于TCP/IP协议族,该参数置AF_INET; 第二个参数指定要创建的套接字类型,流套接字类型为SOCK_STREAM、数据报套接字类型为SOCK_DGRAM、原始套接字SOCK_RAW(WinSock接口并不适用某种特定的协议去封装它,而是由程序自行处理数据包以及协议首部); 第三个参数指定应用程序所使用的通信协议,此参数可以指定单个协议系列中的不同传输协议,在Internet通讯域中,此参数一般取值为0,系统会根据套接字的类型决定应使用的传输层协议。3.3.4. c。

    9、losesocket函数closesocket函数的格式为:closesocket( SOCKET s); closesocket函数用来关闭一个描述符为s的套接字。如果发生错误,则closesocket()返回0;否则的话,返回SOCKET_ERROR错误 。3.3.5. sendto函数sendto函数的格式为:sendto( SOCKET s, const char FAR* buf, int len, int flags,const struct sockaddr FAR* to, int tolen); sendto函数用来向某个端口发送数据。s:一个标识套接口的描述字;buf:包含。

    10、待发送数据的缓冲区;len:buf缓冲区中数据的长度;flags:调用方式标志位;to:(可选)指针,指向目的套接口的地址;tolen:to所指地址的长度 。3.3.6. recvfrom函数recvfrom函数的格式为:recvfrom(int s,void *buf,int len,unsigned int flags, struct sockaddr *from,socket_t *fromlen) recvfrom函数用来接收返回的ICMP包。s:标识一个已连接套接口的描述字;buf:接收数据缓冲区;len:缓冲区长度;flags:调用操作方式;from:(可选)指针,指向装有源地址的。

    11、缓冲区;fromlen:(可选)指针,指向from缓冲区长度值。3.3.7. bind函数bind函数的格式为:int bind( SOCKET s, const struct sockaddr FAR* name,int namelen) bind函数用来给socket绑定一个IP地址和一个特定的端口号。s:标识一未捆绑套接口的描述字;name:赋予套接口的地址;sockaddr结构定义如下: struct sockaddr u_short sa_family; char sa_data14; ; namelen:name名字的长度。4. 系统设计4.1 主要目标本程序主要实现了:UDP扫描。

    12、功能;能对单个指定的主机进行扫描或扫描指定网段内的主机;能扫描特定的部分端口号或对指定的端口段内的端口进行逐个扫描;4.2 开发环境及工具测试平台:Windows XP Professional使用软件:Visual C+ 6.0开发语言:C语言4.3 功能模块与系统结构作为端口扫描程序,首先需要完成的功能就是对于系统操作系统的服务端口进行扫描,返回扫描结果。对于端口的扫描,包括对于本机系统服务端口,局域网内目标机系统,以及远程IP的系统服务端口进行扫描。有些时候,用户并不需要去扫描整个系统的所有端口,因为这样的话不仅会浪费大量的时间,而且可能导致难以找到自己需要了解的端口的扫描结果。所以,对。

    13、于选择性地对端口进行扫描也非常重要。这当然也是扫描程序需要实现的功能之一。用户在等待扫描的时候,往往希望知道它的工作进度。这样用户可以更好地控制自己的操作。站在用户的角度思考,设置进度是程序需要完成的,这样就能知道程序扫描的进度。系统必须提供的服务是功能需求的基本,本着站在用户角度思考的原则,做出如上叙述需求,从简列举如下:扫描功能;地址选择功能;端口选择功能;端口扫描程序功能模块如下图所示:图1 系统功能模块图图2 程序执行流程图5. UDP扫描的实现这种方法由于使用的是UDP协议。由于这个协议很简单,所以扫描变得相对比较困难。这是由于打开的端口对扫描探测并不发送一个确认,关闭的端口也并不需。

    14、要发送一个错误数据包。幸运的是,许多主机在你向一个未打开的UDP端口发送一个数据包时,会返回一个ICMP_PORT_UNREACH错误。这样就能发现哪个端口是关闭的。UDP和ICMP错误都不保证能到达,因此这种扫描就不那么可靠。而且这种扫描方法是很慢的,因为RFC对ICMP错误消息的产生速率做了规定,而且本程序的UDP扫描只支持单线程。5. 1 基本原理首先使用socket()函数创建套接字,再用bind()函数绑定套接字,然后向扫描的目的主机的目的端口发送UDP数据包,再等待目的主机的目的端口是否返回ICMP_PORT_UNREACH错误数据报,若收到返回的错误数据包,则说明该端口是关闭着的。

    15、,否则该端口是打开的,再将打开的端口保存进静态数组中,以方便显示结果。DoScanPort_UDP(LPVOID lp) / UDP port to scansockfd = socket(AF_INET, SOCK_RAW, IPPROTO_ICMP); if(bind(sockfd,(sockaddr *)&SOURCE_ADDR,sizeof(SOURCE_ADDR) = SOCKET_ERROR)if(retval = dlg.Send_UDPinfo(S_ADDRESS, inet_addr(D_ADDRESS), Source_Port, PortToScan) = SEND_FA。

    16、ULT) else if(retval = SEND_SET_ERROR)else if(retval = SEND_OK)if(retval=dlg.Get_ICMPinfo(sockfd,&DEST_ADDR)=1)str.Format(%d,PortToScan);showout_udp+=str+|;closesocket(sockfd);return 0;5.2 计算效验和首先通过while循环,将各位相加求和,若为奇数个字节,则最后通过if循环将最后一个字节加完,再移位做位运算,最后取反得到效验和,再返回给调用函数。/计算校验和USHORT checksum(USHORT *buf。

    17、fer, int size)unsigned long cksum = 0;while (size 1)cksum += *buffer+;size -= sizeof(USHORT);if (size)cksum += *(UCHAR*)buffer;cksum = (cksum 16) + (cksum &0xffff);cksum += (cksum 16);return (USHORT)(cksum);5.3 发送UDP数据包先调用WSASocket()函数创建sock套接字,再调用setsockopt()函数设置套接字选项,再将UDP、IP头部填充好,最后调用sendto()函数将构。

    18、造的数据包发送到目的IP地址的扫描的端口。/发送TCP协议数据/为了独立性 协议的数据结构全部定义在内部int SendUdpPacket(int Port, char *DestIp) if (sock=WSASocket(AF_INET,SOCK_RAW,IPPROTO_IP,NULL,0,WSA_FLAG_OVERLAPPED)=INVALID_SOCKET) if (Check_Ret = setsockopt(sock,IPPROTO_IP, IP_HDRINCL,(char *)&FLAG,sizeof(FLAG) total_len,0,(struct sockaddr *)&D。

    19、EST_ADDR,sizeof(DEST_ADDR);closesocket(sock);return 0;5.4 接收ICMP数据包首先定义一个套接字集合,并将其清空,再把读数据的套节字加入到套接字集合中,再通过select()函数检查套节字是否可读:1.如果没有则返回1给主调函数,表示没有收到返回的ICMP_PORT_UNREACH错误数据报,则说明该端口是打开的。2.如果有可读的套接字,就再通过FD_ISSET()函数检查需要读取的套接字是否在可读的套接字集合中:(1)如果可读的套接字中没有需要读取的套接字,则返回1给主调函数,表示没有收到返回的ICMP_PORT_UNREACH错误数据。

    20、报,则说明该端口是打开的。(2)如果可读的套接字中有需要读取的套接字,则调用recvfrom()函数从套接口上接收数据,如果没有数据,则说明该套接口不是用来传送数据的,则可以判断为返回的ICMP_PORT_UNREACH错误数据报,则说明该端口是关闭的。/数据包解析/数据包解析int PacketUDPICMPAnalyzer(int Port, char *PacketBuffer)Ip_Header *pIpheader;int iProtocol, iTTL;char protocolstr100 = 0;char szSourceIP16, szDestIP16;SOCKADDR_IN。

    21、 saSource, saDest;pIpheader = (Ip_Header*)PacketBuffer;HANDLE hCon = GetStdHandle(STD_OUTPUT_HANDLE);/窗口缓冲区信息CONSOLE_SCREEN_BUFFER_INFO bInfo;/获取窗口缓冲区信息GetConsoleScreenBufferInfo(hCon, &bInfo);iProtocol = pIpheader-Protocol;/check source IPsaSource.sin_addr.s_addr = pIpheader-SourceAddr;:strcpy(szSo。

    22、urceIP, inet_ntoa(saSource.sin_addr);/check dest ipsaDest.sin_addr.s_addr = pIpheader-DestinationAddr;:strcpy(szDestIP, inet_ntoa(saDest.sin_addr);/ttliTTL = pIpheader-TTL;/计算ip长度int iIphLen = sizeof(unsigned long)*(pIpheader-Version_HLen &0x0f);/判断是否是正确的返回数据包if (pIpheader-SourceAddr = inet_addr(Des。

    23、tIpAddr)/判断是否是icmp协议数据if (iProtocol = IPPROTO_ICMP)/icmp头部Icmp_Header *icmp;/读取icmp数据icmp = (Icmp_Header*)(PacketBuffer + sizeof(Ip_Header);/判断是否是应答if (icmp-i_type = 3) & (icmp-i_code = 3)/确定端口是关闭的fprintf(output,Port %d Closen, Port);/返回1表示成功return 1;else/端口开放状态未知fprintf(output,Port %d Unknownn, Por。

    24、t);return 1;else if (iProtocol = IPPROTO_UDP)/如果返回的是udp报文,则端口是开放的fprintf(output,Port %d Openn, Port);/能够正确判断 成功返回return 1;else/既不是icmp数据包又不是udp数据 则表示不是想要的数据/返回错误return 0;else/不是正确的返回数据包return 0;/恢复原来的属性SetConsoleTextAttribute(hCon, bInfo.wAttributes);return 1;6. UDP扫描检测图3 扫描结果图由于UDP协议是非面向连接的,对UDP端口的。

    25、探测也就不可能像TCP端口的探测那样依赖于连接建立过程(不能使用telnet这种tcp协议类型命令),这也使得UDP端口扫描的可靠性不高。所以虽然UDP协议较之TCP协议显得简单,但是对UDP端口的扫描却是相当困难的。下面具体介绍一下UDP扫描方案: 优点:可以完成对UDP端口的探测。 缺点:需要系统管理员的权限。扫描结果的可靠性不高。因为当发出一个UDP数据报而没有收到任何的应答时,有可能因为这个UDP端口是开放的,也有可能是因为这个数据报在传输过程中丢失了。另外,扫描的速度很慢。原因是在RFC1812的中对ICMP错误报文的生成速度做出了限制。例如Linux就将ICMP报文的生成速度限制为。

    26、每4秒钟80个,当超出这个限制的时候,还要暂停1/4秒。7. 心得体会本设计经过近1个多月的努力,基本满足了一个端口扫描程序的基本要求。完成后的程序实现了TCP connect()扫描和UDP扫描功能,TCP扫描支持多线程,能大大加快扫描速度。能对单个指定的主机进行扫描或扫描指定网段内的主机。能对指定的端口段内的端口进行逐个扫描,或扫描特定的部分端口号,以避免在不需要了解的端口号上浪费时间。进度条显示,能方便用户随时知道扫描的进度。系统设计期间,学习到很多课堂上没有的知识,还积累了很多实践经验,增强了动手能力和解决实际问题的能力。通过这次的课程设计,对网络编程有了更深入的了解,进一步熟悉了TC。

    27、P和UDP协议的内容,掌握了TCP、UDP扫描端口的基本原理,学会了运用sock套接字构造UDP数据包并发送,以及如何接收ICMP数据包。对编程思想有了进一步的体会,养成了一些良好的编程习惯。系统虽然完成,但还有很多不足之处,希望自己能不断学习和实践,争取以后做得更好。虽然此软件实现了支持多线程的TCP connect()扫描功能,和单线程的UDP扫描功能。但也还有很多不足之处,如扫描功能单一:不支持TCP SYN扫描、TCP FIN 扫描以及IP段扫描等功能,对UDP扫描不支持多线程功能,而且在扫描主机前没有发送ICMP报文去判断主机是否在线,还需要进一步完善。限于作者知识水平和经验有限,此程序还有许多有待完善和改正的地方,恳请各位老师和读者批评指正。参 考 文 献1 甘刚、闫丽丽、盛志伟、冼进Linux/UNIX网络编程中国水利水电出版社2008年第1版 2 范建华、胥光辉、张涛 等译TCP/IP详解 卷1:协议机械工业出版社2009年第1版3 黄维通Visual C+面向对象与可视化程序设计(第2版)清华大学出版社2007年第2版4 郑莉、董渊、张瑞丰C+语言程序设计(第3版)清华大学出版社2004年第3版。

    展开全文
  • 如果有玩安全的小伙伴,我们知道端口扫描工具里面,有个比较知名成熟的工具——Nmap,使用过程中,最让人头疼就是它里面有各种各样的参数,通过设置不同的参数,可以使用很多种方式对端口进行扫描,而且相应的判断...
  • zmap安装以及端口扫描

    千次阅读 2015-04-03 16:18:06
    1.example:22端口扫描:zmap -p 22 -o results1.csv 192.168.0.0/16-p 指定端口,-o 指定输出文件 2.安装方法:第一步:sudo apt-get install build-essential cmake libgmp3-dev libpcap-dev gengetopt byacc flex ...
  • TCP端口测试使用 telnet 测试现有端口连通性可以使用 Linux 自带的 telnet 工具来检测现有端口的连通性,测试命令为:telnet # host 是目标服务器 IP,port是待测试端口号示例:可以如下指令测试 22 端口的连通性:...
  • C语言命令行编程

    千次阅读 2020-02-14 18:01:31
    C黑窗口程序可以调用其他任何C语言黑窗口程序在命令行执行, 调用方法就是 system( "C:\\CMD.exe" ); 调用system函数,传入路径 我们通过CMD,也可以调用其他任何C语言黑窗口程序 7. 通过...
  • select的缺点: 单个进程能够监视的文件描述符的数量存在最大限制,通常是1024,当然可以更改数量,但由于select采用轮询的方式扫描文件描述符,文件描述符数量越多,性能越差; 内核 / 用户空间内存拷贝问题,...
  • 操作系统探测、如何探测访问控制规则和端口扫描用于第 2 阶段,其中操作系统探测就是对目标主机运行的操作系统进行识别,如何探测访问控制规则用于获取被防火墙保护的远端网络的资料,而端口扫描通过与目标系统的TCP...
  • 端口扫描

    千次阅读 2011-05-28 21:04:00
    一、端口扫描器功能简介: 服务器上所开放的端口就是潜在的通信通道,也就是一个入侵通道。对目标计算机进行端口扫描,能得到许多有用的信息,进行端口扫描的方法很多,可以是手工进行扫描、也可以用端口扫描软件...
  • \ } #define PORT 2400 //服务端监听端口 #define FD_SIZE 1100 //连接的描述符大小 #define TASK_SIZE 1100 //线程池任务队列大小 pthread_mutex_t handle_mutex[FD_SIZE + 100]; //每个连接创建一把锁,解决临界区...
  • 为什么说Redis是线程的以及Redis为什么这么快!

    万次阅读 多人点赞 2018-03-07 17:39:56
    (1)单进程启动:此时系统中仅有一个进程,该进程既充当Master进程的角色,也充当Worker进程的角色。 (2)多进程启动:此时系统有且仅有一个Master进程,至少有一个Worker进程工作。 (3)Master进程主要进行...
  • 文章转载自完成端口(Completion Port)详解 看了文章中的解说,大体看得明白。 但是当时有个不解之处:就是投递WSARecv请求的时候,没有明显传入该操作对应的自己定义的操作类型(就是GetQueuedCompletionStatus的...
  • ​ 为了解决大量客户端访问的问题,引入IO技术:一个进程可以同事对多个客户请求进行服务,复用一个进程对多个IO进行服务。IO读写的数据多数情况下没准备好,需要通过一个函数监听这些数据状态,一旦有数据可以读写...
  • 编写端口扫描

    2005-06-14 08:26:00
    编写端口扫描器 C++写的一、端口扫描器功能简介:服务器上所开放的端口就是潜在的通信通道,也就是一个入侵通道。对目标计算机进行端口扫描,能得到许多有用的信息,进行端口扫描的方法很多,可以是手工进行扫描、...
  • c语言库函数

    2019-07-03 16:41:39
    c语言库函数 Turbo C 2.0 函数中文说明大全 -------------------------------------------------------------------------------- 分类函数,所在函数库为ctype.h int isalpha(int ch) 若ch是字母('...
  • 任务要求: 1.以命令行形式运行:SendTCP source_ip source_port dest_ip dest_port; 2.头部参数自行设定,数据字段为“This is my homework of ...本系统要求使用C语言作为基本开发语言,并且开发工具为绿色软件,...
  • 端口扫描器(zz)

    2011-11-28 01:56:12
    2006-05-12 01:42 1588人阅读 评论(1) ...对目标计算机进行端口扫描,能得到许多有用的信息,进行端口扫描的方法很多,可以是手工进行扫描、也可以用端口扫描软件进行。  扫描器通过选用远程TCP/I
  • c语言面试题大全

    千次阅读 2016-10-09 11:10:35
    C语言面试题大汇总 4. static有什么用途?(请至少说明两种) 1.限制变量的作用域(DL:使其只在定义的当前文件中起作用,static是只能由与变量在同一个文件中定义的程序存取的全局变量。也就是说使全局变量成为文件...
  • c语言常用系统函数

    千次阅读 2016-07-01 16:39:59
    B.8 进程控制函数.......................................................................................38 B.9 查找和分类函数............................................................................
  • *文件作用:这个文件的作用是用来编写一个单进程,单线程的多客户的套接字的 *客户端 ****************************************************************************/ #include <stdio.h> //引入stdio.h...
  • c语言从入门到入坑

    2019-06-24 10:37:38
    创建一个项目不能包含特殊字符,最好用英文加上数字 空项目没有什么可以生成,...C语言的输入输出靠的是标准库stdio,其中std表示标准库,io表示输入输出,i是input输入,o是output输出 命令提示符编程 Cmd打开...
  • 目录僵尸进程研究报告摘要背景知识1.1 Linux进程的组成1.2 Linux进程的生命过程1.2.1 Linux 进程的创建僵尸进程2.1 僵尸进程产生的原因2.2 僵尸进程产生的危害2.2.1 浪费资源2.2.2 占用端口2.2.3 导致父进程死锁2.3 ...
  • C语言面试题汇编

    千次阅读 2019-02-20 15:13:31
    C语言面试题汇编
  • Nmap扫描软件分析

    千次阅读 2017-12-27 00:46:44
    Nmap扫描软件分析[摘要] Nmap英文全称NetWork Mapper,中文为“网络映射器”,是一款开源的网络探测和安全审核的工具,它的设计目标是快速地扫描大型的网络与主机。Nmap最早是Linux下的网络扫描和嗅探工具包,后来...
  • 文件传输协议的C语言实现

    千次阅读 2017-05-16 17:22:32
    第ChpNum章 文件传输协议的C语言实现 1设计目的 本设计旨在利用Winsock2.0简单实现FTP(File Transfer Protocol,文件传输协议)的客户端和服务器端程序。通过完成此设计,了解Winsock API函数调用方法和一般网络应用...
  • Ladon一款用于大型网络渗透的多线程插件化综合扫描神器,含端口扫描、服务识别、网络资产、密码爆破、高危漏洞检测以及一键GetShell,支持批量A段/B段/C段以及跨网段扫描,支持URL、主机、域名列表扫描。5.5版本内置...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 5,236
精华内容 2,094
关键字:

单进程端口扫描c语言