转自王柏元的博客:C++扫描指定主机开放的端口,代码可到原网站下载

C++扫描指定主机开放的端口,OS提供了connect()系统调用,用于与远程主机某端口建立连接,如果远程主机该端口处于帧听状态,则connect()连接成功;否则说明该端口关闭。

// ScanPorts.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include<iostream>
using namespace std;
#include<WinSock2.h>
#pragma comment (lib,"ws2_32.lib")
#define STATUS_FALIED 0xFFFF
unsigned long serverIP;
long MaxThread = 200;
long ThreadCount = 0;
long *aa = &ThreadCount;
//扫描端口的线程
DWORD WINAPI ScanPort(LPVOID lpParam){
    short Port = *(short*)lpParam;
    InterlockedIncrement(aa);
    //创建流式套接字
    SOCKET sock = socket(AF_INET, SOCK_STREAM,0);
    if (sock == INVALID_SOCKET){
        cout << "创建套接字失败!" << endl;
        return 0;
    }
    else{
        //填充服务器地址
        sockaddr_in severAddr;
        severAddr.sin_family = AF_INET;
        severAddr.sin_port = htons(Port);
        severAddr.sin_addr.S_un.S_addr = serverIP;
        //判断此机器是否打开
        connect(sock, (sockaddr*)&severAddr, sizeof(severAddr));
        struct fd_set write;
        FD_ZERO(&write);
        FD_SET(sock, &write);
        //初始化超时时间
        struct timeval timeout;
        timeout.tv_sec = 100 / 1000;
        timeout.tv_usec = 0;
        if (select(0,NULL,&write,NULL,&timeout)>0)
        {
            cout << Port <<",";
        };
        closesocket(sock);
    }
    InterlockedDecrement(aa);
    return 0;
}
void main(int argc, char *argv[])
{
    if (argc != 2){
        cout << "请输入目的主机IP地址" << endl;
    
    }
    //建立与socket库的绑定
    WSADATA WSAData;
    if (WSAStartup(MAKEWORD(2, 2), &WSAData) != 0)
    {
        cout << "WSAStartup falied!" << GetLastError() << endl;
        ExitProcess(STATUS_FALIED);
    }
    serverIP = inet_addr(argv[1]);
    cout << "下列端口已开放:" << endl;
    for (int i = 1; i < 1024; i++){
        //超过最大允许线程数等待
        while (ThreadCount >= MaxThread)
            Sleep(10);
        //创建线程,扫描端口
    DWORD ThreadID;
    CreateThread(NULL, 0, ScanPort, (LPVOID)new short(i), 0, &ThreadID);
    }
    //还有没有结束的线程,等待
    while (ThreadCount>0)
        Sleep(50);
    WSACleanup();
}

C++扫描指定主机开放的端口相关推荐

  1. java扫描指定主机的端口socket服务

    全栈工程师开发手册 (作者:栾鹏) java教程全解 java扫描指定主机的端口服务.此处扫描本机的端口.获取具有socket服务的端口 当端口不存在socket服务时,会抛出异常. 测试代码 pub ...

  2. 怎么用python扫描主机_python扫描主机开放的端口

    !/usr/bin/python -- coding: utf-8 -- """ @version: ?? @author: Guanjie Zhou @license: ...

  3. linux扫描目标主机开放端口

    介绍 常用端口扫描工具 1.网络分析工具SATAN 2.网络安全扫描器NSS 3.Strobe 4.Internet Scanner 5.Port Scanner 6.Nmap 1.超牛X的多线程端口 ...

  4. 在线扫描网站/网址开放的端口

    1.在线端口检测 http://coolaf.com/tool/port 2.json在线 https://www.sojson.com/zz/portscan.html 3.站长在线工具大全 htt ...

  5. Linux主机开放指定端口

    背景 一般我们的项目开发完成之后,都会部署到相应的测试环境或者生产环境.有的时候会出现我们的应用程序在linux主机上已经正常启动了,但是本地还是无法连接访问. 出现这种情况的原因一般是如下两种: 主 ...

  6. namp扫描网络中IP、端口信息

    nmap 介绍 NMap,也就是Network Mapper,最早是Linux下的网络扫描和嗅探工具包 安装 yum install namp -y 常规使用 # 判断ip是否开放指定端口 nmap ...

  7. nmap扫描mysql的命令_端口扫描命令nmap

    下面教大家在CentOS中用nmap查看主机端口: 一.安装nmap yum install nmap -y 二.使用nmap nmap localhost    #查看主机当前开放的端口 nmap ...

  8. linux怎么查看防火墙开放的端口,linux查看防火墙状态和对外开放的端口状态

    1.查看防火墙状态 查看防火墙状态 systemctl status firewalld 开启防火墙 systemctl start firewalld 关闭防火墙 systemctl stop fi ...

  9. nmap 扫描局域网内的机器 扫描指定电脑的开放的端口

    1. 扫描局域网内的机器 nmap -sP 192.168.1.0/24 nmap -sS 192.168.1.0/24 2.扫描指定机器的端口开放 nmap -sS 192.168.1.61 -p ...

  10. linux 扫描开放的端口命令,在Linux系统中检查(扫描)开放端口的方法

    无论是对网络连接问题进行故障排除还是配置防火墙,首先要检查的是在系统上实际打开的端口,本文介绍几种查找系统外部打开端口的方法,即在Linux系统中检查(扫描)开放端口. 什么是开放端口 侦听端口是应用 ...

最新文章

  1. C++ Primer 5th笔记(chap 17 标准库特殊设施)匹配标志
  2. (三十)java多线程一
  3. 钉钉开发者接口文档_无需开发,IT事件接入钉钉的方法详解
  4. 走近Flex组件系列(三):按扭组件(Button,CheckBox,LinkBar,LinkButton,PopUpButton,RadioButton,ToggleButtonBar)...
  5. php imap配置,怎么为PHP编译imap扩展?
  6. 拯救者linux无法正常关机,Ubuntu无法关机解决办法
  7. 去掉xsl运行的飞鸽传书办法
  8. mysql静默安装_oracle静默安装文件db_install.rsp详解
  9. 产品开发项目中文档的重要性
  10. java字符串构造函数的应用_构造函数中的参数0需要找不到类型为'java.lang.String'的bean...
  11. H3C模拟器ping,tel,ssh配置
  12. Codecraft-18 and Codeforces Round #458: C. Travelling Salesman and Sp(组合数)
  13. Postfix 邮件队列删除
  14. 【R语言教程】不一样的零基础教程,数据分析到论文写作一站式完成
  15. python文档整理,Python官方文档内置函数整理Word版
  16. Ubu开启ftp服务 启用root用户登录
  17. 20151221-精典语录
  18. 单链表的基本操作,建立单链表,插入删除等
  19. MySQL - 学习/实践 - 多多翻阅补充
  20. Three.js 透明物体不能正常显示(闪烁)/渲染顺序的控制问题

热门文章

  1. 玩具积木行业调研报告 - 市场现状分析与发展前景预测
  2. Git使用小记——复制粘贴快捷键的修改
  3. 成绩录取系统c语言,一个学生成绩管系统C语言源代码.doc
  4. oracle dataguard 日志传输,从alert日志看Oracle 11g DataGuard日志传输
  5. go语言实现家庭收支记账本
  6. 蓝屏代码0x000009f
  7. java 工厂模式例子_java 工厂模式简单介绍及例子
  8. 微信、米聊等国内kik类手机通信录互动应用前景探讨
  9. 联想拯救者Legion Y7000P 2020款安装ubuntu16.04 解决WIFI 显卡 cuda10.2)
  10. ping丢包故障处理