python 网络安全常用库 python做网络安全

server/2025/3/1 2:29:14/

🍅 点击文末小卡片 ,免费获取网络安全全套资料,资料在手,涨薪更快

最近有同学问我,说想用Python写渗透辅助工具,但是却不知道该如何下手,该怎么办。我告诉他,细化渗透测试的过程,把其中的一些使用其他工具完成的步骤,尝试着使用Python来代替就可以了。

所以今天填一个坑,用Python来实现渗透测试过程中的端口扫描。

1、什么是端口

接触过网络技术的同学大概都知道端口是什么东西,没有接触过的同学,经过下面的简单介绍应该也能明白端口是个什么东西。

网络上我们会使用到各种各样的服务(当然不是各种各样的网站,网站所提供的多是Web服务),比如浏览网站,发送邮件,使用ftp下载某些资源,使用SSH或Telnet连接远程服务器等。这些服务有可能都是由同一个服务器提供的。

同一个服务器上提供那么多服务,怎么对他们进行区分呢?端口就是用来对他们进行区分和唯一标识的,每一个服务都使用不同的端口,就像一栋楼里面的不同房间一样。

我们常见的网站Web服务默认使用的是80端口:

python <a class=网络安全常用库 python做网络安全_python网络安全协议" src="https://i-blog.csdnimg.cn/img_convert/9ec5dccce9fc81232cf78b123f80e859.gif" />

用来上传和下载文件的FTP使用的是21端口:

python <a class=网络安全常用库 python做网络安全_端口号_02" height="361" src="https://i-blog.csdnimg.cn/img_convert/cf8a80f8162e5089d870a762d151ab8a.png" width="511" />

我们通过域名或IP地址找到对应的服务器,然后再通过端口号,找到对应的服务。

有需要更加详细的介绍的同学,可以查看各种百科:https://baike.baidu.com/item/%E6%9C%8D%E5%8A%A1%E5%99%A8%E7%AB%AF%E5%8F%A3/718781?fr=aladdin

2、扫描端口与端口服务

2.1、目的与原因

我们知道服务器的端口之上运行着对应的服务,而服务都有其版本。我们对服务器进行端口扫描,有两个目的:

一是要确定服务器上开启了哪些服务;

二是要确定开启的服务使用的是什么版本的服务。

这两个目的都是为了缩小行动的范围,提交行动的效率和准确性。例如我们知道了某个主机开启了80端口,那么其就很有可能提供了Web服务,我们就可以进一步通过其Web服务使用的语言(比如PHP)和框架(比如WordPress)以及框架的版本(比如4.8.2)去寻找相应的漏洞:

python <a class=网络安全常用库 python做网络安全_python网络安全协议_03" height="382" src="https://i-blog.csdnimg.cn/img_convert/8c47aa78923b7f78ea0619138bf7726e.png" width="891" />

又比如我们经常使用SSH来远程登录服务器,其默认运行于22端口之上,如果我们扫描到了服务器开启了这个端口,那么服务器很有可能开启了远程连接的功能,如果我们获取ssh的banner得到其服务版本正好是一个存在安全漏洞的版本,那么就有了一个新的测试攻击点:

python <a class=网络安全常用库 python做网络安全_Python_04" height="471" src="https://i-blog.csdnimg.cn/img_convert/a08e81aaf1e76ee91aebecb10d9dae75.png" width="730" />

2.2、Python实现

那么我们如何使用Python进行端口的识别和扫描呢?

在Python中,有一个内置模块——socket提供了网络socket的操作,其中包含了如下函数来支持socket连接的具体功能实现:

socket() -- 创建一个新的socket对象

socketpair() -- 创建一对新的socket对象

fromfd() -- 从打开文件描述符中创建一个socket对象

fromshare() -- 从接收的数据中创建socket对象

gethostname() -- 返回当前主机名

gethostbyname() -- 映射主机名到对应的IP地址上

gethostbyaddr() -- 映射主机名或IP地址到DNS信息上

getservbyname() -- 映射服务名称和端口名称到端口号上

getprotobyname() -- 映射协议名称到一个数字上

ntohs(), ntohl() -- 将16, 32位整数从网络转换为主机字节顺序

htons(), htonl() -- 将16, 32位整数从主机转换为网络字节顺序

inet_aton() -- 将IP地址从字符串转换为32位字节数据格式

inet_ntoa() -- 将IP地址从32位字节转换为字符串

socket.getdefaulttimeout() -- 获取默认连接超时值

socket.setdefaulttimeout() -- 设置默认连接超时值

create_connection() -- 通过源地址和设置连接超时创建一个链接

我们可以通过这个模块的socket()函数创建一个socket对象来连接服务器的指定端口,比如下列代码所示:

# 引入socket模块

import socket

# 实例化一个socket对象

s = socket.socket()

# 与远程服务器的指定端口建立socket连接

s.connect(('huabandata.com',22))

# 关闭连接

s.close()

上述代码我们就通过socket模块的socket()函数建立了对huabandata.com这个域名的22端口的socket连接,然后进行了连接的关闭。

当然,连接成功是不可能的,这样做一辈子都不可能连接成功。运行这段代码甚至连输出的信息都不会有:

python <a class=网络安全常用库 python做网络安全_服务器_05" src="https://i-blog.csdnimg.cn/img_convert/827796cfff5d8b3be3df546fea6ed4f1.gif" />

如何得到socket连接的输出信息呢?socket对象中的一个方法——recv()或许可以帮到我们:

python <a class=网络安全常用库 python做网络安全_python 网络安全常用库_06" height="399" src="https://i-blog.csdnimg.cn/img_convert/46e4f654d7e78f60128f85c9bbd272f7.png" width="539" />

仔细看看这个方法的说明:

python <a class=网络安全常用库 python做网络安全_端口号_07" height="220" src="https://i-blog.csdnimg.cn/img_convert/a425eb2b380b0010920e6e8d7ec0353c.png" width="902" />

它的作用是从socket连接中返回指定大小的字节,我们继续测试一下这个方法:

# 引入socket模块

import socket

# 实例化一个socket对象

s = socket.socket()

# 与远程服务器的指定端口建立socket连接

s.connect(('192.168.223.152',22))

# 打印输出从socket连接中返回的1024个字节

print(s.recv(1024))

# 关闭连接

s.close()

在此,我们使用了著名的渗透测试框架Metasploit提供的靶机虚拟机Metasploitable2来作为目标主机,这是一个容易受到攻击的Linux虚拟机。这个虚拟机可以用来进行安全培训,测试安全工具,并练习常用的渗透测试技术。

python <a class=网络安全常用库 python做网络安全_端口号_08" height="434" src="https://i-blog.csdnimg.cn/img_convert/d316c8b49eb7aeb779e20120b8ec24a0.png" width="717" />

有需要的同学在sourceforge进行下载,下载链接为:https://sourceforge.net/projects/metasploitable/

python <a class=网络安全常用库 python做网络安全_python 网络安全常用库_09" height="333" src="https://i-blog.csdnimg.cn/img_convert/b7777feda7be723b130fc2695e8ab365.png" width="1047" />

运行代码,我们得到了socket返回的前1024个字节(一般是服务信息的banner):

python <a class=网络安全常用库 python做网络安全_python网络安全协议_10" src="https://i-blog.csdnimg.cn/img_convert/e0ee5df3a80cd67f95f25599858f805e.gif" />

通过这个返回的banner信息,我们可以知道这个服务器的22端口是开放的,而且其服务版本是ubuntu上的openssh 4.7。

可以发现,借助于recv()方法,我们可以获取到端口服务的最基本信息,但是如果对应的端口没有开启或者有其他的限制,那么就可能会报错。比如下面这样:

# 引入socket模块

import socket

# 实例化一个socket对象

s = socket.socket()

# 与远程服务器的指定端口建立socket连接

s.connect(('192.168.223.152',88))

# 打印输出从socket连接中返回的1024个字节

print(s.recv(1024))

# 关闭连接

s.close()

我们连接目标主机的23端口,其返回了一个XXX异常错误,如下动图所示:

python <a class=网络安全常用库 python做网络安全_python 网络安全常用库_11" src="https://i-blog.csdnimg.cn/img_convert/058082057b686c1e33c278c2b5681186.gif" />

综上所述的情况,我们利用socket的几个方法稍微组合一下,就可以创建一个用于端口扫描的脚本。

1.首先引入socket模块:

# coding:utf-8

import socket

2.接着实例化一个socket对象:

s = socket.socket()

3.设置socket连接超时时间为3秒

s.settimeout(3)

4.接收键盘输入需扫描的端口号:

port = input("请输入端口号:")

5.连接并打印返回的字节:

try:

s.connect(("192.168.223.152",int(port)))

print(s.recv(1024))

s.close()

except Exception as e:

print(">>>扫描错误:",e)

最后完整的代码如下所示:

# coding:utf-8

import socket

s = socket.socket()

s.settimeout(3)

port = input("请输入端口号:")

try:

s.connect(('192.168.223.152',int(port)))

print(s.recv(1024))

s.close()

except Exception as e:

print(">>>扫描错误:",e)

下面,我们来测试一下这个端口扫描器:

python <a class=网络安全常用库 python做网络安全_Python_12" src="https://i-blog.csdnimg.cn/img_convert/5ea08c376f5dcc08a8592e249b71598e.gif" />

这样,一个简单的主机端口扫描器就完成了。如何完善和增加它的功能?我们下一篇继续:)

网络安全学习路线

对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。

同时每个成长路线对应的板块都有配套的视频提供:

需要网络安全学习路线和视频教程的可以在评论区留言哦~

最后

给小伙伴们的意见是想清楚,自学网络安全没有捷径,相比而言系统的网络安全是最节省成本的方式,因为能够帮你节省大量的时间和精力成本。坚持住,既然已经走到这条路上,虽然前途看似困难重重,只要咬牙坚持,最终会收到你想要的效果。

黑客工具&SRC技术文档&PDF书籍&安全>web安全等(可分享)

结语

网络安全产业就像一个江湖,各色人等聚集。相对于欧美国家基础扎实(懂加密、会防护、能挖洞、擅工程)的众多名门正派,我国的人才更多的属于旁门左道(很多白帽子可能会不服气),因此在未来的人才培养和建设上,需要调整结构,鼓励更多的人去做“正向”的、结合“业务”与“数据”、“自动化”的“体系、建设”,才能解人才之渴,真正的为社会全面互联网化提供安全保障。

特别声明:
此教程为纯技术分享!本教程的目的决不是为那些怀有不良动机的人提供及技术支持!也不承担因为技术被滥用所产生的连带责任!本教程的目的在于最大限度地唤醒大家对网络安全的重视,并采取相应的安全措施,从而减少由网络安全而带来的经济损失


http://www.ppmy.cn/server/171441.html

相关文章

开源模型应用落地-DeepSeek-R1-Distill-Qwen-7B-Docker助力-模型部署 “光速” 指南

一、前言 在人工智能的浪潮里,大语言模型不断迭代更新,DeepSeek-R1-Distill-Qwen-7B 模型凭借出色的表现,吸引着无数开发者的目光。然而,想要将这个强大的模型顺利部署并投入使用,过程却并不轻松。传统的部署方式仿佛布满荆棘,从底层环境搭建到各种依赖项的适配,每一步都…

机器学习2-决策树

1 决策树的特点与数学表达 决策树属于监督学习的一种&#xff0c;起源非常早&#xff0c;符合直觉并且非常直观&#xff0c;模仿人类做决策的过程&#xff0c;早起人工智能模型中有很多应用&#xff0c;现在更多时基于决策树的一些集成学习算法。 把决策树的基础学习好&#…

【一起学Rust | 框架篇 | Tauri2.0框架】在Tauri应用中设置Http头(Headers)

文章目录 前言一、配置准备1. 检查版本2. 使用条件3. 支持的请求头&#xff08;并不是全部支持&#xff09; 二、使用步骤1. 如何配置header2. 框架集成1. 对于Vite系列、Nuxt、Next.js这种前端框架Vite系列框架Angular系列框架Nuxt系列框架Next.js系列框架 2. 对于Yew和Leptos…

3dtiles平移旋转工具制作

3dtiles平移旋转缩放原理及可视化工具实现 背景 平时工作中&#xff0c;通过cesium平台来搭建一个演示场景是很常见的事情。一般来说&#xff0c;演示场景不需要多完善的功能&#xff0c;但是需要一批三维模型搭建&#xff0c;如厂房、电力设备、园区等。在实际搭建过程中&…

利用Python爬虫精准获取VIP商品详情:实战案例指南

在电商竞争日益激烈的今天&#xff0c;VIP商品的详细信息对于商家制定策略、优化用户体验以及进行市场分析具有至关重要的价值。然而&#xff0c;VIP商品页面结构复杂且可能随时更新&#xff0c;这给爬虫开发带来了不小的挑战。本文将通过一个完整的案例&#xff0c;展示如何利…

UML各种图

1、用例图 2、类图对象图 3、顺序图 4、通信图协作图 5、状态图 6、活动图 7、构件图包图 8、部署图

MySQL 数据库基础详细解释和示例

目录 数据库操作关键字 CREATE DATABASE USE DROP DATABASE 表操作关键字 CREATE TABLE DESCRIBE ALTER TABLE DROP TABLE 数据操作关键字 INSERT INTO SELECT UPDATE DELETE 索引操作关键字 CREATE INDEX DROP INDEX 事务处理关键字 START TRANSACTION CO…

HTML——前端基础1

目录 前端概述 前端能做的事情​编辑 两步完成一个网页程序 前端工具的选择与安装 HTML HTML5介绍 HTML5的DOCTYPE声明 HTML基本骨架 文字标签 标题之标签 标签之段落、换行、水平线 标签之图片 标签之超文本链接 标签之文本 列表标签之有序列表 列表标签之无序…