Windows下兼容 IPv4IPv6 的扫描软件Scan6源代码

IP地址扫描程序/扫描工具 随着许多组织采用自带设备 (BYOD) 等策略,IT 网络变得越来越复杂。随着越来越多的设备连接到网络,IP 地址扫描势在必行,以确保设备在连接到网络时不会遇到问题。IP 地址扫描器是 OpUtils 中的一个模块,是一个全面的 IP 地址管理和交换机端口映射解决方案,可帮助 IT 网络管理员在几秒钟内扫描复杂网络基础设施的 IP地址空间。OpUtils的IP地址扫描器使IT网络管理员能够实时了解IP地址状态,可用性,保留IP,IP使用情况,检测IP地址冲突,并通过其IP地址跟踪功能持续跟踪它们。 阅读详情
/*
scan6
written by Marco Del Percio
09/11/2004

DESCRIPTION: Scan6 is a simple IPv4/IPv6 single host portscanner.
It can check for ANY open port on a single IPv4/IPv6 host or you
can specify a startport and an endport if you don't want to check
all the 65535 ports. Scan6 requires a mandatory option in order
to specify if you are going to scan an IPv4 or an IPv6 address.
Scan6 is a high-multithreading console application.

REQUIRES: This application is designed to work on Windows 2000/XP however
it was only tested on Windows XP SP1. To use it with IPv6 addresses you
MUST have an IPv6 address (so you should have Microsoft IPv6 Tech. Preview
if you are using Windows 2k).
To compile this you need:
1)Platform SDK (updated)
2)Microsoft VC++6.0
3)IPv6 installed

NOTE: This application was only tested on Windows XP SP1!
This application uses a lot of threads if you specify "big" port-range.
So checking all 65535 ports will take much time, DO NOT TERMINATE the program ;-P
just wait ;)
IMPORTANT: If you don't specify startport and endport (65535 ports), I have decided
to use 257 threads with every thread checking for 255 ports using a single socket.
On the other side, if you specify a startport and an endport (smaller range) I have
decided to use X thread (where X can be max 1285) with every thread checking for
51 ports using a single socket, this way if the range is small there are more threads
that means more sockets and "generally" means more speed in small port ranges.

*/
#define WIN32_LEAN_AND_MEAN
#include <winsock2.h>
#ifndef IPPROTO_IPV6
#include <tpipv6.h> // For IPv6 Tech Preview.
#endif
#include <ws2tcpip.h>
#include <stdio.h>
#include <process.h>

#pragma comment(lib, "ws2_32")

//Global Variables
HANDLE TID[257];
HANDLE *TIARRAY;
WSADATA wsaData;
char *server;
int stport, edport, avanzo, totalthreads;
short family;

//Threads declaration
void Scan(void *p);
void ScanPort(void *q);

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

int RetVal, i, q, totalports;

if(!(argc == 3 || argc == 5)) {
printf("/nERROR! Usage: %s <-4|-6> <ipv4/ipv6_host_to_scan> [startport] [endport]/n/nNOTE: If you want to check /"not so big/" port range/nspecify a startport and an endport, the scanner will go faster/n/n", argv[0]);
exit(-1);
}
//family protocol (mandatory)
if((RetVal = atoi(argv[1])) == -4) {
family = AF_INET;
}
else if((RetVal = atoi(argv[1])) == -6) {
family = AF_INET6;
}
else {
fprintf(stderr, "/nERROR! The first option must be -4 or -6/n");
exit(-1);
}
//IPv4/IPv6 host or IP address (mandatory)
server = argv[2];

if ((RetVal = WSAStartup(MAKEWORD(2, 2), &wsaData)) != 0) {
    fprintf(stderr, "/nWSAStartup failed with error %d/n", RetVal);
    WSACleanup();
    exit(-1);
}

//we are checking a specific port range from a startport to an endport
if(argc == 5) {
stport = atoi(argv[3]);
edport = atoi(argv[4]);
if(stport >= edport) {
fprintf(stderr, "/nERROR! Endport must be higher than startport.../n");
WSACleanup();
exit(-1);
}
if(stport < 1 || stport > 65535 || edport < 1 || edport > 65535) {
fprintf(stderr, "/nERROR! Ports must be values between 1 and 65535/n");
WSACleanup();
exit(-1);
}
//1 single thread will check 51 open ports
totalports = edport - stport + 1; //total number of ports
totalthreads = (int)(totalports / 51); //total number of necessary threads
avanzo = totalports % 51; //missing ports to be added to the last thread
if(avanzo > 0) {
totalthreads++;
}
printf("/n/n----IPv4/IPv6 PortScanner for Windows 2k/XP----/n/nBy LeVante^/n/n----Scan6----/nHost/IP Address: %s/nStart Port: %d/nEnd Port: %d/n----PortScanning just started. Please wait----/n/n", server, stport, edport);
TIARRAY = (HANDLE) malloc(totalthreads*sizeof(HANDLE));

for(i=0;i<totalthreads;i++) {
TIARRAY[i] = CreateMutex(NULL, FALSE, NULL);
_beginthread( ScanPort, 0, (void *) i);
}
Sleep(100);
//waits for all threads to end
WaitForMultipleObjects(totalthreads, TIARRAY, TRUE, INFINITE);

for(q=0;q<totalthreads;q++)
CloseHandle(TIARRAY[q]);

}
//we are checking ALL the 65535 ports
else {
stport = 1;
edport = 65535;

printf("/n/n----IPv4/IPv6 PortScanner for Windows 2k/XP----/n/nBy LeVante^/n/n----Scan6----/nHost/IP Address: %s/nStart Port: %d/nEnd Port: %d/n/nNOTE: If you want to check /"not so big/" port range/nspecify a startport and an endport, the scanner will go faster/n/n----PortScanning just started. Please wait----/n/n", server, stport, edport);
//1 single thread uses 1 socket to check 255 ports. I use 257 threads. So 255*257 = 65535 ports
for(i=0;i<257;i++) {
TID[i] = CreateMutex(NULL, FALSE, NULL);
_beginthread( Scan, 0, (void *) i);
}
Sleep(100);
//waits for all threads to end
WaitForMultipleObjects(257, TID, TRUE, INFINITE);

for(q=0;q<257;q++)
CloseHandle(TID[q]);
}

printf("/n/n----Port Scan terminated----/n");
WSACleanup();
exit(0);
}

void Scan(void *p) {

int id = (int) p;
int connfd, Ret, startport, endport, r;
ADDRINFO Hints, *AddrInfo;
char portstr[6];
SOCKET sock;
struct sockaddr_in servaddr;
struct sockaddr_in6 *servaddr6 = NULL;

WaitForSingleObject(TID[id], INFINITE);

startport = id * 255 + 1;
endport = startport + 255 - 1;

//one socket per thread
if((sock = socket(family, SOCK_STREAM, 0)) == INVALID_SOCKET) {
fprintf(stderr, "Thread with id: %d couldn't create Socket/n", id);
ReleaseMutex(TID[id]);
_endthread();
}
if(family == AF_INET) {
memset(&servaddr, 0, sizeof(servaddr));
servaddr.sin_addr.s_addr = inet_addr(server);
servaddr.sin_family = family;

for(r=startport;r<=endport;r++) {
servaddr.sin_port = htons(r); //we only change the port, this way struct reuse is maximized

if((connfd = connect(sock, (struct sockaddr *)&servaddr, sizeof(servaddr))) == 0) {
  printf("Port %d OPEN/n", r);
}

}
}
else if(family == AF_INET6) {
memset(&Hints, 0, sizeof(Hints));
Hints.ai_family = (int) family;
Hints.ai_socktype = SOCK_STREAM;
sprintf(portstr, "%d", startport);
//getaddrinfo is called only once just to fill the AddrInfo->ai_addr structure
if((Ret = getaddrinfo(server, portstr, &Hints, &AddrInfo)) < 0) {
fprintf(stderr, "Unable to resolve %s/n", server);
fflush(stderr);
ReleaseMutex(TID[id]);
_endthread();
}

servaddr6 = (struct sockaddr_in6 *)AddrInfo->ai_addr;


for(r=startport;r<=endport;r++) {
servaddr6->sin6_port = htons(r); //we only change the port, this way struct reuse is maximized

if((connfd = connect(sock, (struct sockaddr *) servaddr6, sizeof(struct sockaddr_in6))) == 0) {
  printf("Port %d OPEN/n", r);
}

}
}

closesocket(sock);
ReleaseMutex(TID[id]);
_endthread();
}

void ScanPort(void *q) {

int id = (int) q;
int connfd, Ret, startport, endport, r;
ADDRINFO Hints, *AddrInfo;
char portstr[6];
SOCKET sock;
struct sockaddr_in servaddr;
struct sockaddr_in6 *servaddr6 = NULL;

WaitForSingleObject(TIARRAY[id], INFINITE);

startport = id * 51 + stport;
if(id == (totalthreads - 1) && avanzo > 0) {
endport = startport + (avanzo - 1);
}
else {
endport = startport + 50;
}
//one socket per thread
if((sock = socket(family, SOCK_STREAM, 0)) == INVALID_SOCKET) {
fprintf(stderr, "Thread with id: %d couldn't create Socket/n", id);
ReleaseMutex(TIARRAY[id]);
_endthread();
}

if(family == AF_INET) {
memset(&servaddr, 0, sizeof(servaddr));
servaddr.sin_addr.s_addr = inet_addr(server);
servaddr.sin_family = family;

for(r=startport;r<=endport;r++) {
servaddr.sin_port = htons(r); //we only change the port, this way struct reuse is maximized

if((connfd = connect(sock, (struct sockaddr *)&servaddr, sizeof(servaddr))) == 0) {
  printf("Port %d OPEN/n", r);
}

}
}
else if(family == AF_INET6) {
memset(&Hints, 0, sizeof(Hints));
Hints.ai_family = (int) family;
Hints.ai_socktype = SOCK_STREAM;
sprintf(portstr, "%d", startport);
//getaddrinfo is called only once just to fill the AddrInfo->ai_addr structure
if((Ret = getaddrinfo(server, portstr, &Hints, &AddrInfo)) < 0) {
fprintf(stderr, "Unable to resolve %s/n", server);
fflush(stderr);
ReleaseMutex(TIARRAY[id]);
_endthread();
}

servaddr6 = (struct sockaddr_in6 *)AddrInfo->ai_addr;


for(r=startport;r<=endport;r++) {
servaddr6->sin6_port = htons(r); //we only change the port, this way struct reuse is maximized

if((connfd = connect(sock, (struct sockaddr *) servaddr6, sizeof(struct sockaddr_in6))) == 0) {
  printf("Port %d OPEN/n", r);
}

}
}

closesocket(sock);
ReleaseMutex(TIARRAY[id]);
_endthread();
}

/* EOF */ 
IPv6网络管理实用工具大全 随着互联网用户数量的快速增长以及物联网设备的广泛应用,传统的IPv4地址已经无法满足市场需求,而IPv6作为下一代互联网协议,拥有几乎无限的地址空间,支持自动配置、安全性增强和更高效率的网络性能。为了确保网络的平滑过渡和持续运行,IT专业人员需要掌握相关的IPv6实用工具,以实现对IPv6网络环境的有效管理和故障排查。在这一章节中,我们探讨了IPv6网络安全与应用层工具的使用。 阅读详情

相关推荐

全面解析局域网IP扫描工具的使用与功能

Nmap(Network Mapper)是一款功能强大的开源网络扫描和安全审核工具。它被广泛用于网络发现和安全审计。Nmap利用原始IP包来确定网络上哪些主机是可用的,这些主机提供哪些服务(应用程序名称和版本),它们运行什么操作系统(和版本),使用什么类型的数据包过滤/防火墙,以及许多其他特性。要使用NSE编写脚本,需要了解Lua语言的基础知识。Nmap提供了丰富的库和函数来帮助编写脚本。以下是一个简单的NSE脚本示例,用于探测目标主机上的SSH服务版本:s:close()elseend。

weixin_42527589的博客 1873

ip冲突 scan windows_Windows下兼容 IPv4IPv6 的扫描软件Scan6源代码

/* scan6 written by Marco Del Percio 09/11/2004 DESCRIPTION: Scan6 is a simple IPv4/IPv6 single host portscanner. It can check for ANY open port on a single IPv4/IPv6 host or you can specify a startp...

weixin_39847732的博客 299

端口扫描(ipv4和ipv6都适合)

用C#写的一个小型端口扫描程序,适合学习和更改。

ip冲突 scan windows_Windows下兼容 IPv4IPv6 的扫描软件Scan6源代码 | 学步园

/*scan6written by Marco Del Percio09/11/2004DESCRIPTION: Scan6 is a simple IPv4/IPv6 single host portscanner.It can check for ANY open port on a single IPv4/IPv6 host or youcan specify a startport and...

weixin_35980011的博客 415

Visionpro 使用CogPMAlignTool工具提取匹配轮廓点

【代码】Visionpro 使用CogPMAlignTool工具提取匹配轮廓点。

weixin_43947315的博客 2093

【Ragflow】9.问答为什么比搜索响应慢?从源码角度深入分析

前几天看到有群友提到一个现象:Ragflow的搜索界面的问答速度很快,但聊天界面的问答速度很慢,究竟是什么原因?在深入挖掘源码之后,逐渐发现了问题的答案。

兴趣使然的创作者 2906

IPV6探测

领导提了个问题,怎么找出没实施IPV6的设备或域名,简单整理了一下。

LainWith的博客 1万+

SPICE模型入门到精通

文章目录前言一、SPICE是什么?二、1. 前言 由于笔者的毕业设计与功率半导体器件建模相关,需要用到SPICE软件来建模,在这记录一下从零开始的SPICE学习历程~ 一、SPICE是什么? 电子产品的设计一般先从功能框图开始,然后细化到原理图,还要经过很调试验证过程,最终才能完成。调试和验证的过程复杂而繁琐,在设计集成电路时更是如此,在制造之前急需验证集成电路的功能。 根据电路理论,人们可以建立起节点方程和回路方程,通过解这些方程组成的方程组就可以得到结果,也就是说可以通过计算来获得电路的工作情况。但

qq_42031914的博客 7万+

探索IPv6网络的利器:fi6s

探索IPv6网络的利器:fi6s 项目介绍 在现代互联网中,IPv6的广泛应用使得网络扫描工具的重要性日益凸显。fi6s就是这样一款专为IPv6设计的快速端口扫描器,它以异步发送和处理原始数据包的方式实现高速扫描,旨在成为Masscan在IPv6领域的强力替代品。虽然目前功能尚不及Masscan全面,但其高效性能足以满足大多数需求。 项目技术分析 fi6s的核心在于它的异步操作模式,这一特性使得它...

gitblog_00018的博客 656

EDF Browser使用说明和技巧

edf browser使用说明和一些小技巧

Erhu_666的博客 8336

双目视觉入门实战:用Matlab标定相机,再到Python OpenCV完成测距的完整链路

本文详细介绍了双目视觉技术的完整实现流程,从Matlab相机标定到Python OpenCV测距的全链路实践。重点解析了Matlab与OpenCV的参数转换技巧,以及立体校正、视差计算等关键步骤的代码实现,帮助开发者快速掌握双目测距系统的搭建方法。

weixin_29166013的博客 448

狂赌智能手机 中国互联网巨头深陷零利润困局

编者按:智能手机正在中国普及,互联网企业趋之若鹜。然而,在苹果、三星共享智能手机市场99%利润的大背景下,中国互联网企业要从所剩无几的利润空间里分一杯羹,注定备受煎熬,前路迷茫。   互联网巨头纷纷进入智能手机市场,一场声势浩大的国内智能手机战役拉开序幕。   近日,有消息称,盛大将于6月6日对外发布首款智能手机,但上市日期目前尚未确定。   此前,也有传言称,网易将加入千元智能机大战,样机

szu030606的专栏 5630

深入解析NRF52832安全DFU Bootloader实现机制与蓝牙OTA升级流程

本文深入解析了NRF52832芯片安全DFU Bootloader的实现机制与蓝牙OTA升级流程。详细阐述了Bootloader的核心概念、双区升级策略、源码初始化流程以及蓝牙DFU服务的数据传输协议,并提供了从环境搭建、密钥生成到编译烧录、生成升级包的完整实战指南,帮助开发者构建安全可靠的无线固件更新系统。

weixin_29188043的博客 494

渗透测试——漏洞扫描工具

然后还要将all这个压缩包里的plugin_feed_info.inc提取出来,命令行是 tar -zxvf all-2.0.tar.gz plugin_feed_info.inc,然鹅,我提取不出来。将下载好的插件移动到Nessus目录下,然后输入sudo /opt/nessus/sbin/nessuscli update all-2.0.tar.gz。用户名和密码随便写写就好,随后将会更新补丁,OK,这样Nessus可以使用了。将会获得一串数字,然后去激活码的这个网站,输入自己的邮箱获取激活码。

wuli1024的博客 5011

扣子Coze工作流教程:采集公众号爆文,一键仿写自动发布

通过本教程,你学会了如何利用扣子(Coze)平台构建一个完整的公众号文章自动处理工作流。这个系统不仅能够大幅提升内容产出效率,还能通过AI二创保持内容新鲜度和原创性。最佳实践建议:初次使用时,建议先保存为草稿而不是直接发布,以便人工审核;从简单的工作流开始,逐步增加复杂度;定期检查工作流运行日志,优化节点配置。自动化内容创作是新媒体运营的未来趋势,掌握这项技能将使你在数字内容领域占据显著优势。

互联网架构师笔记 1240

Python量化- Black-Litterman 模型

​​​​​​​Black-Litterman 模型由 Fischer Black 和 Robert Litterman 于 1992 年开发,采用贝叶斯方法进行资产配置。该模型通过结合先前的回报估计(可以从多个来源得出)并结合投资者对未来回报的独特预期来优化分配权重。

探索人工智能领域 1030

IPv6来啦 (by quqi99)

版权声明:可以任意转载,转载时请务必以超链接形式标明文章原始出处和作者信息及本版权声明 (作者:张华 发表于:2018-08-03) 问题 家里用的是中国移动的宽带, 一直挺稳定的, 而且昨天发现ISP下发了IPv6地址(不是子网, 形如: 2409:8a00:7805:xxxx:xxxx:xxxx:xxxx:xxxx/64, 打xxxx的部分是动态变化的). 好吧, 咱就用用. 路由器...

技术并艺术着 1万+

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

IPv6容易被黑客入侵?专家透露探测的研究与检测实现

真正黑客帝国已经来临了,中国教父级网络安全专家郭盛华透露:IPv6即将普及,随即IPv6相关安全性会相继爆发,并容易受到黑客入侵。由于masscan和zmap等便捷的IPv6扫描工具,网络扫描越来越受欢迎。这个堪称是黑客界教父级的扫描工具,现在用普通PC扫描整个IPv4地址空间不到一个小时。 在检测IPv6的时候,我们先说说这种大规模IPv4网络扫描是网络/安全操作的重要问题,因为对这种恶意活动...

w3cschools的博客 1883

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

nmap扫描ipv6端口_NMAP-详解

0X01 简介NMAP是一款开源代码的网络探测和安全审核工具。0X02 主要功能1、探测主机是否在线2、嗅探主机提供的服务3、嗅探主机的操作系统0X03 功能0X04 用法nmap[扫描类型][选项]{目标规范}-iL:来自主机/网络列表的输入-iR:选择随机目标--排除:排除主机/网络--exclude file:从文件中排除列表0X05 主机发现-sL:List Scan-简单地列出要扫描的目...

weixin_39819974的博客 7105

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

Nmap 扫描器的使用技巧

1.nmap语法 -A 全面扫描/综合扫描 例如:nmap -A 127.0.0.1 扫描指定段 例如:nmap 127.0.0.1-200&nmap 127.0.0.1/24 2.Nmap 主机发现 -sP -sP ping扫描 例如:nmap -sP 127.0.0.1 -P0 -P0 无ping扫描 备注:【协议1,协议2】【...

weixin_30390075的博客 894

Fi6S:一款功能强大且高效的IPv6端口扫描工具

Fi6S是一款功能强大且高效的IPv6端口扫描工具,该工具的运行速度非常快,支持通过异步发送和处理原始数据包来实现其功能。该工具的设计原理和目标与非常相似,并且目前处于积极开发中,未来版本将新增更多高级功能。

HUANGXIN9898的博客 1691

NMap 使用技巧总结

NMap 使用技巧总结

weixin_54278187的博客 960

2024年网络安全最全Fi6S:一款功能强大且高效的IPv6端口扫描工具,2024年阿里网络安全高级面试题分享

在结束之际,我想重申的是,学习并非如攀登险峻高峰,而是如滴水穿石般的持久累积。尤其当我们步入工作岗位之后,持之以恒的学习变得愈发不易,如同在茫茫大海中独自划舟,稍有松懈便可能被巨浪吞噬。然而,对于我们程序员而言,学习是生存之本,是我们在激烈市场竞争中立于不败之地的关键。一旦停止学习,我们便如同逆水行舟,不进则退,终将被时代的洪流所淘汰。因此,不断汲取新知识,不仅是对自己的提升,更是对自己的一份珍贵投资。让我们不断磨砺自己,与时代共同进步,书写属于我们的辉煌篇章。需要完整版PDF学习资源私我。

2401_84264244的博客 1150

mapperscan扫描多个包_Rdpscan:一款BlueKeep快速扫描工具

这是一款快速的CVE-2019-0708漏洞扫描工具。目前,公共互联网上大约有900,000台机器容易受到这种漏洞的影响,这还是一个命令行工具。您可以下载源代码并自行编译,也可以从上面的链接下载一个用于Windows或macOS的预编译二进制文件。此工具完全基于https://github.com/zerosum0x0/CVE-2019-0708的rdesktop补丁。我只是修改了代码,...

weixin_39612817的博客 1753

namp 批量扫描全端口(ipv6)

由于goby无法进行ipv6的端口扫描,所以编写python代码进行单独的ipv6的端口扫描

bqnagus 909
上一篇: 一个内核级的SHELL工具
下一篇: 一段关闭瑞星监控的源代码并附带程序
iiprogram
博客等级 码龄25年 1068粉丝 1515原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值