自己手动在Linux上实现一个简易的端口扫描器

news/2024/5/18 19:37:25

背景

常常听到网络攻击有一个东西叫做端口扫描器,可以扫描指定服务器开放的端口,然后尝试连接,并寻找漏洞,最终攻破服务器。而那些使用的端口扫描器都是一个个现成的程序,看上去很厉害的样子。而实际上这些东西对于懂行的人的来说,那可就太简单了。本文就演示一下快速写一个端口扫描器,仅供参考,来揭开一下端口扫描器的神秘面纱。

 

分析

所谓端口扫描,就是探测服务器哪些端口被公开。如果这些端口是无意中公开了,且没有设置良好的安全策略,就存在安全漏洞。通过端口扫描,锁定端口后,利用已知的漏洞和攻击方法,然后尝试攻击。一旦攻破,就可以拿到服务器的控制权,就可以和服务器主人一样拿到最高权限。换句话说,就相当于可以随便使用这个服务器了。一般就被当作肉鸡,悄悄运行着一些程序,在必要的时候会去攻击别人。当然,如果服务器上有重要资料,就可能会被勒索。我以前不懂,服务器就被人攻击勒索过,不过也没有重要资料就没有勒索成功,然后重装了系统解决了。

 

在Linux上我们一般常用检测端口是否能通的工具为telnet。例如:

telnet <网址或IP> 22

不过如果不通,会等比较长的时间。而端口扫描则需要进行大量的端口的探测,所以效率不行。

在《telnet测试端口并超时后退出》一文中,我们实现了超时退出,不过不总是好用。

 

所以今天介绍一个很厉害的命令,即nc。这个命令被称为瑞士军刀,足见这个命令的好用强大。

nc 是一个常用的网络工具,也称为 netcat。它可以在网络中读写数据,支持 TCP、UDP 协议,同时还能监听端口、进行端口扫描等。 

 

centos7中,nc命令位于/usr/bin/nc,这是一个软链接,指向 /usr/bin/ncat。

ncat 是 netcat 的改进版本,提供了更多的功能和选项。它可以用于监听和传输数据,支持 TCP、UDP 和 SCTP 协议。ncat 提供了更多的安全性和扩展性,支持 SSL 加密、IPv6 地址等特性。

 

nc的-z参数可以提供不发数据的探测,-v可以提供详细信息,-w提供超时时间,单位为秒。

nc的用法:

nc -zv {主机} {端口} -w 超时时间

如果测试端口是开放的,日志有Ncat: Connected to。如果端口没有开放,则有不会有Connected字样。所以我们可以根据这个来编写一个shell脚本,就是简易的端口扫描器了。

 

下面是代码scan_port.sh:

 

 

#! /bin/bash

host="110.80.135.11"

start_port=1

end_port=65536

echo -n "opened port:"                                                                                                             

for (( port=$start_port; port<=$end_port; port++ )); do

    #echo "scan port:$port"

    r=$(nc -zv $host $port -w 1 2>&1 | grep "Connected")

    if [ "$r" ];then

        echo -n "$port,"

    #else

    #    echo "close"

    fi  

done

执行脚本:

sh scan_port.sh

这个脚本会扫描1-65536个端口,这个是允许开放的所有端口。这样扫描会比较慢,所以一般我们会扫描常用的端口,比如22、80、443这样的,都扫不到之后再从头到尾扫描。这里只是演示,就不写过多的逻辑了。

然后用循环遍历65536个端口,每一个都使用nc命令检测一下,如果返回连通过,就输出一个端口,并将端口连在一起。现在是默认输出到屏幕。如果要保存结果,则可以再将结果重定向到文件,我们就可以挂在后台扫描了。扫描完再看看即可。

 

下面的执行的效果:

 

0ab43ba22db34644836848e513269729.png

 

这里仅用一段简单的shell脚本,就可以实现一个端口扫描器。如果有更多需要,可以进行定制化编写。真正的黑客,不只是用别人现成的工具,大部分都是自己写脚本来实现定制化的。

 

所以只是简单用一些软件,都是入门级的黑客哟。高级的黑客一定有自己私人的工具库哦。

 

总结

端口扫描其实很简单,使用telnet就可以实现。只是nc使用更有性价比,非常好用。看着高大上的端口扫描器,其实你分分钟也可以编写一个哦。


原文地址: http://www.yu7s.com/article/20240418193923831.html


http://www.mrgr.cn/p/21778341

相关文章

[dp 小计] SOSdp

复健 SOSdp(sum over subsets dynamic programming)。 引入 令 \(F(x)=\sum\limits_{u\subseteq x} A(u)\) 其中 \(A\) 为给定数组,求出 \(\forall x, F(x)\) 。 思路一 暴力枚举子集,时间复杂度 \(O(4^n)\)。 思路二 优化子集枚举,时间复杂度 \(O(3^n)\)。 思路三 考虑 SOS…

HTTP慢连接攻击的原理和防范措施

随着互联网的快速发展&#xff0c;网络安全问题日益凸显&#xff0c;网络攻击事件频繁发生。其中&#xff0c;HTTP慢速攻击作为一种隐蔽且高效的攻击方式&#xff0c;近年来逐渐出现的越来越多。 为了防范这些网络攻击&#xff0c;我们需要先了解这些攻击情况&#xff0c;这样…

Redis篇:缓存击穿及解决方案

1.何为缓存击穿 缓存击穿问题也叫热点Key问题&#xff0c;就是一个被高并发访问并且缓存重建业务较复杂的key突然失效了&#xff08;有可能是正好过期了&#xff09;&#xff0c;无数的请求访问会在瞬间给数据库带来巨大的冲击。 常见的解决方案有两种&#xff1a; 互斥锁 逻…

【深度学习】yolo-World,数据标注,zeroshot,目标检测

仓库&#xff1a;https://github.com/AILab-CVC/YOLO-World 下载权重&#xff1a; 仓库下载和环境设置 下载仓库&#xff1a;使用以下命令从 GitHub 上克隆仓库&#xff1a; git clone --recursive https://github.com/AILab-CVC/YOLO-World.git创建并激活环境&#xff1a…

Xinlinx FPGA内的存储器BRAM全解

目录 一、总体概述1.7系列FPGA的BRAM特点2.资源情况 二、BRAM分类1.单端口RAM2.简单双端口RAM3.真双端口RAM 三、BRAM的读写1、Primitives Output Registers读操作注意事项2.三种写数据模式&#xff08;1&#xff09;Write_First&#xff08;2&#xff09;Read_First&#xff0…

贪吃蛇的简单实现(c语言)

前言&#xff1a;学完了C语言的基础语法&#xff0c;和一点数据结构的知识&#xff0c;拿贪吃蛇来练练手&#xff0c;并熟悉以前的知识。写完之后&#xff0c;有一种成就感&#xff0c;为以后的学习饱满激情。 注意这里的讲解是由部分到整体的思路。 目录 控制台不能是终端&am…

UE4网络图片加载库(带内存缓存和磁盘缓存)

UE4网络图片加载库,带内存缓存和磁盘缓存,支持自定义缓存大小,支持蓝图和C++代码调用 1、调用示例 2、对外暴露函数 3、源代码-网络模块 KeImageNet.h // Fill out your copyright notice in the Description page of Project Settings.#pragma once#include "CoreM…

BERT-CRF 微调中文 NER 模型

文章目录 数据集模型定义数据集预处理BIO 标签转换自定义Dataset拆分训练、测试集 训练验证、测试指标计算推理其它相关参数CRF 模块 数据集 CLUE-NER数据集&#xff1a;https://github.com/CLUEbenchmark/CLUENER2020/blob/master/pytorch_version/README.md 模型定义 imp…

vulfocus靶场couchdb 权限绕过 (CVE-2017-12635)

Apache CouchDB是一个开源数据库&#xff0c;专注于易用性和成为"完全拥抱web的数据库"。它是一个使用JSON作为存储格式&#xff0c;JavaScript作为查询语言&#xff0c;MapReduce和HTTP作为API的NoSQL数据库。应用广泛&#xff0c;如BBC用在其动态内容展示平台&…

WDS+MDT网络启动自动部署windows(七)添加驱动

简介: 以前的ghost,是封装万能驱动。 现在安装原版ISO,是手动安装驱动。 那么WDS+MDT,怎么装驱动更方便呢? 本来是轻接触,lite touch,通过设置rules,bootstrap,可以达到只选择一下任务序列即可。 那么也要自动安装驱动。 WDS也可以注入驱动,但是是在使用原版安装镜像…

【嵌入式AI部署神经网络】STM32CubeIDE上部署神经网络之指纹识别(Pytorch)——篇一|环境搭建与模型初步部署篇

前言&#xff1a;本篇主要讲解搭建所需环境&#xff0c;以及基于pytorch框架在stm32cubeide上部署神经网络&#xff0c;部署神经网络到STM32单片机&#xff0c;本篇实现初步部署模型&#xff0c;没有加入训练集与验证集&#xff0c;将在第二篇加入。篇二详细讲解STM32CubeIDE上…

4.19作业

1、总结二进制信号量和计数型信号量的区别&#xff0c;以及他们的使用场景。 二进制信号量&#xff1a;信号量的数值只能是0和1&#xff0c;用于共享资源的访问 计数型信号量&#xff1a;信号量的值都是大于或者等于2&#xff0c;实现生产者和消费者模型 2、使用技术型信号量…

手撕netty源码(一)- NioEventLoopGroup

文章目录 前言一、NIO 与 netty二、NioEventLoopGroup 对象的创建过程2.1 创建流程图 前言 本文是手撕netty源码系列的开篇文章&#xff0c;会先介绍一下netty对NIO关键代码的封装位置&#xff0c;主要介绍 NioEventLoopGroup 对象的创建过程&#xff0c;看看new一个对象可以做…

快速新建springboot项目

一、初始化 1.打开IDEA&#xff0c;在Spring initializer这里按照下图项目进行配置。注意&#xff1a;如果jdk是1.8建议将Server URL这里替换为图中的阿里云服务器&#xff0c;否则容易找不到对应的java8&#xff0c;然后点击next 2.在这里提前配置一些需要使用的依赖&#xf…

软考 系统架构设计师系列知识点之大数据设计理论与实践(13)

接前一篇文章&#xff1a;软考 系统架构设计师系列知识点之大数据设计理论与实践&#xff08;12&#xff09; 所属章节&#xff1a; 第19章. 大数据架构设计理论与实践 第4节 Kappa架构 19.4.2 Kappa架构介绍 Kappa架构由Jay Kreps提出&#xff08;Lambda由Storm之父Nayhan M…

react引入iconfont的svg图标

react引入iconfont的svg图标 本文目录 react引入iconfont的svg图标普通图标通过link引入css组件内引入css使用 svg图标通过script引入js组件内引入js使用 通过封装组件自定义封装组件中调用 通过antd封装使用 普通图标 通过link引入css <link rel"stylesheet" h…

C语言 字符类型

下面 我们来说字符类型 我们来看这个 保险单 金额 和 总额 都可以用数字类型 而性别则需要字符型 字符数据的存储 – ASCI码 字符类型 char 就是专为存储字符(如字母&#xff0c;标点和数字)而设计的类型。 使用单引号包含单个字符或转义字符去表示一个 char 类型的常量。 …

【QT学习】9.绘图,三种贴图,贴图的转换,不规则贴图(透明泡泡)

一。绘图的解释 Qt 中提供了强大的 2D 绘图系统&#xff0c;可以使用相同的 API 在屏幕和绘图设备上进行绘制&#xff0c;它主要基于QPainter、QPaintDevice 和 QPaintEngine 这三个类。 QPainter 用于执行绘图操作&#xff0c;其提供的 API 在 GUI 或 QImage、QOpenGLPaintDev…

ZYNQ--PL读写PS端DDR数据

PL 和PS的高效交互是zynq 7000 soc开发的重中之重&#xff0c;我们常常需要将PL端的大量数 据实时送到PS端处理&#xff0c;或者将PS端处理结果实时送到PL端处理&#xff0c;常规我们会想到使用DMA 的方式来进行&#xff0c;但是各种协议非常麻烦&#xff0c;灵活性也比较差&am…

CDN、边缘计算与云计算:构建现代网络的核心技术

在数字化时代&#xff0c;数据的快速传输和处理是保持竞争力的关键。内容分发网络&#xff08;CDN&#xff09;、边缘计算和云计算共同构成了现代互联网基础架构的核心&#xff0c;使内容快速、安全地到达用户手中。本文将探讨这三种技术的功能、相互关系以及未来的发展趋势。 …