-
2019-06-17 10:47:48更多相关内容
-
c++多线程端口扫描程序
2013-07-11 15:15:24多线程端口扫描源程序,带进度条,清晰易懂 -
多线程端口扫描器(C++实现)
2012-05-21 12:15:23多线程 端口扫描器 可导出扫描记录 自定义线程数 自己写的 -
简单实现C多线程端口扫描核心代码
2021-05-26 02:18:38简单实现C多线程端口扫描核心代码(2008-11-21 23:05:00)标签:c端口扫描最近想写一个自己的端口扫描器,主要为了方便扫描“自定义”端口,上网找了一下没找到现成的代码,自己就写了个测试代码。主要实现了:对指定...简单实现C多线程端口扫描核心代码
(2008-11-21 23:05:00)
标签:
c
端口
扫描
最近想写一个自己的端口扫描器,主要为了方便扫描“自定义”端口,上网找了一下没找到现成的代码,自己就写了个测试代码。主要实现了:对指定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下编译成功!
分享:
喜欢
0
赠金笔
加载中,请稍候......
评论加载中,请稍候...
发评论
登录名: 密码: 找回密码 注册记住登录状态
昵 称:
评论并转载此博文
发评论
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。
-
C++实现端口扫描器
2022-04-06 16:25:37单个端口信息抓取 通过判断连接返回的套接字信息来判断端口是否开放,然后抓取端口对应的信息。 #include <stdio.h> #include <string.h> #include <iostream> #include <sys/socket.h> #...单个端口信息抓取
通过判断连接返回的套接字信息来判断端口是否开放,然后抓取端口对应的信息。
#include <stdio.h> #include <string.h> #include <iostream> #include <sys/socket.h> #include <arpa/inet.h> #include <unistd.h> using namespace std; void port_open(char *, int); int main(int argc, char *argv[]) { port_open("192.168.3.132", atoi(argv[1])); return 0; } void port_open(char * addr, int port){ int socketClient; socketClient = socket(AF_INET, SOCK_STREAM, 0); struct sockaddr_in addrSrv; memset(&addrSrv, 0 , sizeof(addrSrv)); addrSrv.sin_family = AF_INET; addrSrv.sin_addr.s_addr = inet_addr(addr); addrSrv.sin_port = htons(port); cout << "-----scaning---port: " << port << endl; if(connect(socketClient, (struct sockaddr*) & addrSrv, sizeof(addrSrv)) == -1){ cout << "[-] " << port << " closed!" << endl; } else{ cout << "[+] " << port << " open!" << endl; int end_index; char message[65536]; end_index = recv(socketClient, message, 65536, 0); cout << end_index << endl; if(end_index == -1) cout << "read failed!" << endl; else{ message[end_index] = '\0'; cout << message << endl; } } close(socketClient); }
多个端口单线程扫描
- 通过getopt和switch来解析命令行参数,此处提供了三个参数,分别时主机地址、开始端口、结束端口。开始端口和结束端口都有对应的默认值。
- 考虑了一下异常的影响。
#include <stdio.h> #include <iostream> #include <string.h> #include <sys/socket.h> #include <arpa/inet.h> #include <unistd.h> #include <pthread.h> #include <exception> using namespace std; char addr[30]; void port_scan(int); void order_port_scan(int, int); int main(int argc, char **argv){ int start_port=1, end_port=1000; int opt; const char *optstring = "a:s:e:"; while((opt = getopt(argc, argv, optstring)) != -1){ switch(opt){ case 'a': strcpy(addr, argv[optind-1]); break; case 's': start_port = atoi(argv[optind-1]); break; case 'e': end_port = atoi(argv[optind-1]); break; default: cout << "parameter error" << endl; exit(0); } } if(addr == nullptr) cout << "address is not supplyed!" << endl; cout << "*********** Scanning " << addr << " from port " << start_port << " to port " << end_port << " *************************"<<endl; order_port_scan(start_port, end_port); return 0; } void order_port_scan(int start_port, int end_port){ for(int port=start_port; port <= end_port; port++) port_scan(port); } void port_scan(int port){ int socketClient; struct sockaddr_in addrSrv; try{ socketClient = socket(AF_INET, SOCK_STREAM, 0); memset(&addrSrv, 0, sizeof(addrSrv)); addrSrv.sin_family = AF_INET; addrSrv.sin_addr.s_addr = inet_addr(addr); addrSrv.sin_port = htons(port); if(connect(socketClient, (struct sockaddr*) &addrSrv, sizeof(addrSrv)) >= 0){ cout << "[+] " << port << " open! " << endl; }else{ cout << "[-] " << port << " closed! " << endl; } }catch(exception e){ cout << "error!" << endl; } close(socketClient); }
多端口多线程实现
- 多线程中加入静态互斥锁,可以通过-p参数指定线程数,但是建议的线程数不要太大,不能超过100,因为此处定义的线程数组大小为100。
- linux下sleep函数的单位时是秒,可以通过usleep来指定更短的时间。
- 在编程实现的过程中考虑线程数的多少,而不是一共有多少个要扫描的端口。
#include <stdio.h> #include <iostream> #include <string.h> #include <sys/socket.h> #include <arpa/inet.h> #include <unistd.h> #include <pthread.h> #include <exception> using namespace std; pthread_mutex_t mutex_x=PTHREAD_MUTEX_INITIALIZER; char addr[30]; struct threadPort{ int thread_port; }; void * port_scan(void *threadarg); int main(int argc, char **argv){ int start_port=1, end_port=1000; int thread_num = 5; int opt; const char *optstring = "a:s:e:p:"; struct threadPort tp[100]; int time_thread = 10000; pthread_t threads[100]; int thread_id; int id = 0; int rc; while((opt = getopt(argc, argv, optstring)) != -1){ switch(opt){ case 'a': strcpy(addr, argv[optind-1]); break; case 's': start_port = atoi(argv[optind-1]); break; case 'e': end_port = atoi(argv[optind-1]); break; case 'p': thread_num = atoi(argv[optind-1]); break; default: cout << "parameter error" << endl; exit(0); } } if(addr == nullptr) cout << "address is not supplyed!" << endl; cout << thread_num << endl; cout << "*********** Scanning " << addr << " from port " << start_port << " to port " << end_port << " *************************"<<endl; for(int port=start_port; port <= end_port; port++, id++){ thread_id = id % thread_num; tp[thread_id].thread_port = port; rc = pthread_create(&threads[thread_id], NULL, port_scan, &tp[thread_id]); if(rc){ cout << "Error, return code from pthread_create() is "<< rc << endl; exit(-1); } usleep(time_thread); } pthread_exit(NULL); return 0; } void * port_scan(void *threadarg){ // 注意函数的原型要这么定义 pthread_mutex_lock(&mutex_x); struct threadPort * data = (struct threadPort *) threadarg; int port = data->thread_port; int socketClient; struct sockaddr_in addrSrv; try{ socketClient = socket(AF_INET, SOCK_STREAM, 0); memset(&addrSrv, 0, sizeof(addrSrv)); addrSrv.sin_family = AF_INET; addrSrv.sin_addr.s_addr = inet_addr(addr); addrSrv.sin_port = htons(port); if(connect(socketClient, (struct sockaddr*) &addrSrv, sizeof(addrSrv)) >= 0){ cout << "[+] " << port << " open! " << endl; }else{ cout << "[-] " << port << " closed! " << endl; } }catch(exception e){ cout << "error!" << endl; } close(socketClient); pthread_mutex_unlock(&mutex_x); pthread_exit(NULL); return NULL; }
#编译命令 g++ simple_pthread_port_scan.cpp -o simple_pthread_port_scan -lpthread #执行命令 ./simple_pthread_port_scan -a 192.168.3.132 -p 20 -s 20 -e 100
-
C语言实现TCP多线程端口扫描
2021-05-22 14:08:51多线程端口扫描实现(C语言)源码:#include #include #include #include #include #pragma comment(lib,"WS2_32.lib")DWORD WINAPI ScanThread (LPVOID port);int main (int argc, char* argv[]){WSADATA wsd;int ...多线程端口扫描实现(C语言)
源码:
#include
#include
#include
#include
#include
#pragma comment(lib,"WS2_32.lib")
DWORD WINAPI ScanThread (LPVOID port);
int main (int argc, char* argv[])
{
WSADATA wsd;
int port = 0;
int MAX_PORT;
clock_t start, end;
HANDLE handle;
DWORD dwThreadId;
//Initialize socket lib
if (WSAStartup (MAKEWORD (2, 2), &wsd) != 0)
{
printf ("WSAStartup failed!\n");
return 1;
}
printf ("请输入要扫描的最大端口:");
scanf ("%d", &MAX_PORT);
printf("Scaning......\n");
start = clock ();
//扫描的主要代码,根据需要删减
do{
handle = CreateThread (NULL, 0, (LPTHREAD_START_ROUTINE)ScanThread, (LPVOID)port, 0, &dwThreadId);
port++;
} while (port < MAX_PORT);
WaitForSingleObject (handle, INFINITE);//等待最后一个线程结束
end = clock ();
int duration = end - start;
printf ("总耗时 %d ms", duration);
system ("pause");
return 0;
}
DWORD WINAPI ScanThread (LPVOID port)
{
int Port = (int)(LPVOID)port;
int retval;//调用各种socket函数的返回值
SOCKET sHost;
SOCKADDR_IN servAddr;
sHost = socket (AF_INET, SOCK_STREAM, IPPROTO_TCP);
if (INVALID_SOCKET == sHost)
{
printf ("socket failed!\n");
WSACleanup ();
return -1;
}
servAddr.sin_family = AF_INET;
servAddr.sin_addr.S_un.S_addr = inet_addr ("127.0.0.1");
//setsockopt (sHost, IPPROTO_TCP, TCP_MAXRT, (char *)&Timeout, sizeof (Timeout));//设置快速扫描
servAddr.sin_port = htons (Port);
retval = connect (sHost, (LPSOCKADDR)&servAddr, sizeof (servAddr));//lpsockaddr is 环路地址
if (retval == SOCKET_ERROR) {
printf ("端口%d关闭!\n", Port); //这里不要使用WSACleanup()函数,不然后续的线程会创建不了socket
closesocket (sHost);
return -1;
}
printf ("端口%d开放!\n", Port);
closesocket (sHost);
return 1;
}
可以在ScanThread线程函数中设置server的IP来确定要扫描的主机,运行时会提示输入扫描的最大端口。
提示.png
调用time.h中的clock函数来精确确定扫描的时间,在end之前调用WaitForSingleObject函数等待最后一个线程扫描结束。
定义start,end时钟
调用WaitForSingleObject
测试结果:
扫描本地:
本地耗时1265ms
扫描百度(123.125.115.110):
扫描百度耗时21262ms
-
Qt多线程端口扫描工具(开源)
2019-04-04 11:10:27本源码在 https://blog.csdn.net/qq78442761/article/details/89016277 中有解释说明 -
简单的端口扫描器实现
2018-06-21 14:57:52本设计通过端口扫描器的研究来提高对计算机安全的认识。利用TCPconnect扫描原理,扫描主机通过TCP/IP协议的三次握手与目标主机的指定端口建立一次完整的...该端口扫描器采用c++语言开发,在VC6.0编译环境下通过测试。 -
python 和 c++ 实现网络端口扫描器 含windows平台和Linux平台
2020-08-26 15:23:34网络端口扫描器 采用python c++两种语言开发。分别有windows平台和Linux平台版本。 介绍:输入端口号进行扫描,支持多线程,支持特定端口扫描或全端口扫描。 -
多线程tcp端口扫描
2010-12-05 14:36:17基于c++语言的tcp端口扫描器,是多线程的 -
c++ 端口扫描程序实现案例
2021-05-22 17:36:16第一、原理端口扫描的原理很简单,就是建立socket通信,切换不通端口,通过connect函数,如果成功则代表端口开发者,否则端口关闭。所有需要多socket程序熟悉,本内容是在window环境下的第二、单线程实现方式// ... -
C++端口扫描器
2014-11-26 00:31:48// PortScan.cpp : Defines the entry point for the console application. #include "stdafx.h" #include #include #pragma comment(lib,"Ws2_32.lib"...//线程个数 #define -
python端口扫描|C++ 扫描端口|编程实现端口扫描器|扫描指定端口
2020-02-01 16:44:091、python 单线程 import socket while True: #引入协议族AF_INET和SOCK_STREAM sm=socket.socket(socket.AF_INET, socket.SOCK_STREAM) sm.settimeout(1) ip = input("靶机ip:") d... -
基于TCP协议的端口扫描设计(C++初学)
2020-06-08 11:33:32#define WIN32_LEAN_AND_MEAN ... //进行多线程 #pragma comment (lib,"ws2_32.lib") //加载ws2_32库文件 using namespace std; //扫描函数——自己创建的线程1 void scan1(string I, int Start -
编写端口扫描器程序分别采用单一进程和多线程方式
2020-11-19 11:43:37单线程与多线程的区别 单线程: 每个正在运行的程序(即进程),至少包括一个线程,这个线程叫主线程 主线程在程序启动时被创建,用于执行main函数 只有一个主线程的程序,称作单线程程序 主线程负责执行程序的所有... -
本机端口扫描器课程设计
2018-06-21 14:56:22本设计通过端口扫描器的研究来提高对计算机安全的认识。利用TCPconnect扫描原理,扫描主机通过TCP/IP协议的三次握手与目标主机的指定端口建立一次完整的...该端口扫描器采用c++语言开发,在VC6.0编译环境下通过测试。 -
计算机端口扫描器(计算机网络课程设计)
2018-08-01 17:24:26本设计通过端口扫描器的...该端口扫描器采用c++语言开发,在VC6.0编译环境下通过测试 资源包含 1. 27页绝对详细的课程设计报告书,包含目录。 2. c++实现的Socket编程 源代码 3. 超级简单好用的Vc 6.0 编译器安装包 -
主机端口扫描程序设计.doc
2021-05-21 14:38:27PAGE主机端口扫描程序设计摘 要计算机信息网络的发展加速了信息化时代的进程,但是随着社会网络化程度的增加,对计算机网络的依赖也越来越大,网络安全...TCP扫描支持多线程,能对单个指定的主机进行扫描或对指定网... -
该程序是在 C++ 和 pthreads 的多线程环境中实现的。 TCP 扫描包括 SYN ACK NULL XMAS 和 FIN 以暗示端口...
2021-07-03 19:53:19端口扫描器 这个项目与linux机器上的nmap工具非常相似。 -
Visual C++串口通信编程---多线程异步方式
2018-08-21 14:27:05Visual C++串口通信编程---多线程异步方式 1. 串口通信基础 提到串口让人想起并口,它们是计算机中两个比较重要的通信方式。 串口:也叫COM口,把字节的二进制位按位列队进行传输,每个字节占一个固定的时间长,... -
1.4 万 Star!迄今为止速度最快的端口扫描器
2021-03-27 10:59:27【导语】:Masscan是一个批量端口扫描器,程序运行在单机上,每秒传输 1 千万个数据包,可以在 6 分钟之内扫完整个互联网。它是迄今为止,速度最快的端口扫描器。 简介 Masscan 的输入输出类似于 nmap,如果对... -
【CTF】端口扫描教程
2019-10-30 11:00:23网络扫描实验实验目的预备知识TCP与UDP扫描的分类nmap简介实验环境安装NmapZenmap图形基本应用1.查找本机网关2....整网段扫描4.选择不同的profile重新对目标10.1.1.1进行扫描5....扫描目标主机10.1.1.2所有端口(... -
MFC实例:[11]编写简单的端口扫描工具
2019-06-08 11:10:55C++ 编写简单的端口扫描工具,使用MFC界面,超时时间和非阻塞技术。(需要多线程可自行添加) -
qt5多线程扫描器帮助!!!!!
2018-12-28 10:09:19如何实现控制台的多线程端口扫描器。 我已经完成了单线程扫描器 //头文件 #ifndef SCAN_H #define SCAN_H #include #include #include #include void scan( QString ad,int sp,int ep) { //连接并验证端口是否... -
计算机网络安全之端口扫描器
2020-04-02 17:48:44实验内容:用C/C++语言(必须用socket函数)编写一个扫描局域网内主机的程序。要求可以显示局域网内的主机名列表,IP地址列表,并可以显示哪些主机开放了哪些端口。 实验环境 主运行机器:Linux kal... -
Python实现扫描局域网活动ip(扫描在线电脑)
2020-12-23 22:50:08linux和windows下都可以用,用多线程来ping1-255所有的地址,效率不高,2分钟左右。 先凑合和用吧。 #-*- coding: utf-8 -*- #author: orangleliu date: 2014-11-12 #python2.7.x ip_scaner.py ''''' 不同平台,... -
Qt端口扫描器(多进程)
2019-08-17 10:29:41简介:该扫描器实现了多线程进行扫描,同时支持端口范围,显示所有已打开端口列表。 开发环境:Ubuntu16.04 开发平台:Qt5.9 语言:C++ 实现:本程序用的是TCP connect扫描,也是最基本的扫描,利用系统提供的... -
C/C++ 实现多线程与线程同步
2022-01-18 09:13:41多线程中的线程同步可以使用,CreateThread,CreateMutex 互斥锁实现线程同步,通过临界区实现线程同步,Semaphore 基于信号实现线程同步,CreateEvent 事件对象的同步,以及线程函数传递单一参数与多个参数的实现... -
.Net下的多线程Tcp端口扫描器
2010-10-20 14:22:00本来想改成SYN半开式扫描器的,后来想起XP SP2不支持原始套接字,也就将就改成活跃式的扫描器了。如果有对SYN感兴趣的朋友,可以用Winpcap改成SYN的。 其实主要的代码就两块: 代码 1 Private ...