-
2020-12-10 19:14:28
from socket import *
import threading #导入线程相关模块
lock = threading.Lock()
openNum = 0
threads = [] #定义线程列表
def portScanner(host,port):
global openNum
try:
s = socket(AF_INET,SOCK_STREAM)
s.connect((host,port))
lock.acquire() #因为openNum是个全局变量,每个线程不能对openNum 同时操作,只有获得所的线程才可以操作 openNum
openNum+=1
print('[+] %d open' % port)
lock.release() #线程对全局变量openNum操作完成后,需要释放所,其他线程才可以继续修改全局变量openNum
s.close()
except: #如果端口没开,那么就直接pass,不执行其他输出操作。
pass
def main():
setdefaulttimeout(1)
ports = [20, 21, 22, 23, 80, 111, 3306] #定义要扫描的端口,也可以在for中使用range进行定义,看个人需求,例如 for p in range(1,1024):
for p in ports:
t = threading.Thread(target=portScanner,args=('192.168.60.130',p))
threads.append(t)
t.start()
for t in threads: #等待线程列表中的所以线程的执行完毕
t.join()
print('[*] The scan is complete!')
print('[*] A total of %d open port' % (openNum))
if __name__ == '__main__':
main()
如果要计算扫描了多久的话,可以导入time模块,然后 程序开始运行的时间 减去 程序结束运行的时间 最后输出时间的差。
更多相关内容 -
简单实现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语言实现TCP多线程端口扫描
2021-05-20 07:33:36多线程端口扫描实现(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
-
python多线程端口扫描
2021-10-13 14:19:15#!/usr/bin/python3 # coding UTF-8 import socket ...# 端口扫描函数 def scan(ports): while True: if not ports.empty(): port=ports.get() #取用消息队列内的取用 #异常处理 try: clien#!/usr/bin/python3 # coding UTF-8 import socket import queue import threading # 端口扫描函数 def scan(ports): while True: if not ports.empty(): port=ports.get() #取用消息队列内的取用 #异常处理 try: client=socket.socket() #创建客户端 client.connect(('www.baidu.com',port)) #端口连接 socket.setdefaulttimeout(1) #延时1秒 print(port) #打印可以连接的端口号,也就是开放的端口 client.close() #关闭客户端 except: pass #连接请求没反应则跳过 # 消息队列 ports=queue.Queue() for p in range(65536): ports.put(p) #将所有端口放进消息队列,待取用 # 多线程 threads=[] for i in range(10000): t=threading.Thread(target=scan,args=(ports,)) #创建线程 threads.append(t) for j in range(len(threads)): threads[j].start()
-
TCP全连接端口扫描器
2021-09-19 21:18:33全连接端口扫描器原理介绍普通扫描器高并发扫描器 原理介绍 TCP全连接端口扫描器是最基础的扫描器,它的原理是调用Socket的connect函数连接到目标IP的特定端口上,如果连接成功说明端口是开放的,如果连接失败,说明... -
端口扫描代码 C语言
2013-12-15 16:23:01端口扫描代码 C语言 ! -
TCP全连接多线程扫描判断目标开放端口
2019-11-06 02:36:31这种方法是通过完整的三次握手来去确定目标端口是否可用 acquire()是给线程加信号量,加信号量后其余线程只能等待 release()是释放信号量的,这时其余线程才开始工作 #!/usr/bin/python # -*- coding: utf-8 -*- ... -
Java多线程编写高效端口扫描器
2017-10-12 23:22:48期末课程设计时想了很久也没有想到要编写个什么,刚好那段时间比特币病毒爆发,很多高校的毕业生的毕业设计,毕业论文等不幸丢失,这时很多人认识到了电脑端口的重要性,于是我也有了想法,想要编写一个端口扫描器。... -
御剑高速tcp全端口扫描工具
2019-03-27 11:19:19主要是采用了.NET中的异步模型加事件通知(俗称IOCP),可能涉及到重复造轮子的嫌疑,但是确实要比很多端口扫描程序的速度要快上很多,因为没有采用多线程,相对来说线程占用不多,所以内存控制的还算比较不错!... -
Python项目实战:使用多线程进行TCP端口扫描
2019-04-09 20:12:40前言 今天为大家一个利用Python扫描开放主机的TCP端口,首先你要查看其中的开放的端口,创建一个TCP全连接扫描器,一般使用socket来创建连接器的,测试当前主机和端口是否开放,直接使用s... -
基于C语言的端口扫描工具设计与实现
2022-02-19 14:01:04端口扫描技术向目标系统的TCP/UDP端口发送探测数据包,记录目标系统的响应,通过分析响应来查看该系统处于监听或运行状态的服务。 1. TCP扫描 常见的tcp端口扫描方式有以下三种: 1.1 全扫描(connect) 扫描主机尝试... -
Python写安全小工具-TCP全连接端口扫描器
2022-05-19 08:46:54通过端口扫描我们可以知道目标主机都开放了哪些服务,下面通过TCP connect来实现一个TCP全连接端口扫描器。 一个简单的端口扫描器 #!/usr/bin/python3 # -*- coding: utf-8 -*- from socket import * def ... -
python scapy的半连接端口扫描
2019-08-25 14:14:30端口扫描常见的一般有以下两种 基于socket的connect全连接扫描(速度快,但是会在对方系统日志留下痕迹) 基于scapy的SYN半连接扫描(不会被扫描的主机发现,速度慢。现在好像防火墙会有痕迹) 详细说明 ... -
用python编写一个基于tcp全连接的端口扫描器
2020-09-21 16:20:33利用Python编写一个TCP端口的扫描器 要求 输入一个主机号和端口列表,并扫描发送数据并获取Banner信息 Step one 目的 获取主机名和端口 知识分解 socket编程 掌握下面两种 服务端 #! /usr/bin/python3.8 # coding:... -
Python 端口扫描(全连接,无多线程)
2018-03-31 16:42:16'''这是一个端口全连接扫描的脚本,扫描结果会比较准确,但是比较费时间''' '''运行环境 Python3 ''' from socket import * def portScanner(host,port): try: s = socket(AF_INET,SOCK_STREAM) #注意参数 s.... -
扫描器篇(六)之python+scapy组合编写基于UDP协议的端口扫描器,顺带解决UDP协议多线程无响应问题
2020-04-18 01:45:02UDP 端口扫描 要对端口进行扫描需要先了解一下UDP协议的特征 UDP是无连接通信协议,即在数据传输时,数据的发送端和接收端不建立逻辑连接。简单来说,当一台计算机向另外一台计算机发送数据时,发送端不会... -
Java实现端口扫描器
2021-11-09 08:52:48通过Java实现一个端口扫描器 原理介绍 端口扫描顾名思义,就是扫描目的资源的端口,来发现...扫描模式:TCP全连接扫描、TCP半连接扫描(待实现) 通过发送空信息,获取开放端口对应服务的应答,获取指纹信息,从而判 -
渗透测试-自己手写端口扫描器
2022-04-23 08:35:00《从零开始写漏扫》系列,端口扫描源码,Python3编写,使用socket实现全连接扫描、Scapy实现SYN半连接扫描、TCP FIN扫描、NULL扫描、XMAS扫描、TCP ACK扫描、TCP窗口扫描。使用锁机制实现线程同步,多线程端口扫描,... -
Python实现端口扫描
2022-01-04 17:32:10# 什么是端口扫描 定义:对一段端口或指定的端口进行扫描。 目的:通过扫描结果可以知道一台计算机上都提供了哪些服务,然后就可以通过所提供的这些服务的己知漏洞就可进行攻击。 原理:当一个主机向远端一个... -
实验三 端口扫描实验
2017-07-11 15:24:58编写一个利用全连接的端口扫描程序,能显示目标主机的端口开放情况。要求能在命令行输入要扫描的目标主机和端口范围。比如:scan *.*.*.* nnnn-mmmm 二、实验设计 (一)实验内容: 编写一个利用全连接的端口... -
(网络编程)一个简单的端口扫描程序
2020-11-19 13:10:182、该程序的功能是使用多线程扫描主机端口是否打开 2、创建程序并写入以下代码 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using -
Python黑客基础:多线程进行TCP端口扫描的介绍
2019-04-27 21:26:00今天为大家一个利用Python扫描开放主机的TCP端口,首先你要查看其中的开放的端口,创建一个TCP全连接扫描器,一般使用socket来创建连接器的,测试当前主机和端口是否开放,直接使用socket连接 导入第三方库 ... -
SYN端口扫描器
2021-05-06 11:18:49由于socke实现的是全连接扫描,因此下面我打算采用Scapy模块的功能来实现SYN半开扫描,进一步提升端口扫描效率。 Scapy sr() sr()函数是用来发送数据包和接收应答。该函数返回一对数据包及其应答,还有无应答的... -
TCP全开端口扫描
2021-10-30 16:31:29elif(response.getlayer(TCP).flags = 0x14): print("The port %s is Closed" % dst_port) 运行结果: 拓展: 可以将发包和判断回应组合成一个函数,然后使用循环遍历端口号,加上多线程进行快速扫描。源码赞不提供... -
C#,多线程客户端IP端口扫描
2015-10-22 16:01:31扫描主要分s扫描,和tcp扫描,S扫描...以下介绍的也只是tcp多线程,单网段扫描了(由于时间久了也懒得改了) 程序界面如下: 程序通过启动另外一个线程来扫描,其中判断ip另端主机是否存在,是通过ping -
Android系统端口扫描器编写初探
2021-05-27 08:56:43最近,很想在安卓手机上玩一下端口扫描器。再者,之前没有写过能运行于Android系统的端口扫描器,于是想写一个出来。扫描器原理及安卓平台上实现方式简析我们知道端口有两种,UDP和TCP。入侵者如果想要探测目标机...