python网络安全怎么学 python做网络安全

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

众所周知,python是近几年比较火的语言之一,它具有简单易懂、免费开源、可移植、可扩展、丰富的第三方库函数等特点,Java需要大量代码的功能同样用python仅短短几行代码就能实现,python具备跨平台特性,Linux和Windows都能使用,所以想不被用于网络安全都难。

那么,这门语言究竟都能在网络攻防中实现哪些作用呢?

目录扫描:Web+多线程(requests+threading+Queue),后台、敏感文件(svn|upload)、敏感目录(phpmyadmin)

信息搜集:Web+数据库,中间件(Tomcat | Jboss)、C段Web信息、搜集特点程序。例如:搜索某个论坛上的所有邮箱,再进行攻击

信息匹配&SQL注入:Web+正则,抓取信息(用户名|邮箱)、SQL注入

反弹shell:通过添加代码获取Shell及网络信息

还有一些绕过WAF脚本,漏洞EXP等都可以通过python来实现

那究竟是如何实现的这些功能呢?这就不得不从基础开始说起了:

Python正则表达式被广泛应用在爬虫开发、多线程、网络编程中,而hacker应用也会涉及到正则表示式相关知识,比如扫描、爆破、POC等

正则表达式(RegEx)使用单个字符串来描述、匹配一系列符合某个句法规则的字符串。 (数字、非数字、标签、url等等)例如,如果想获取里面的ip地址,就需要使用正则表达式实现。Python通过re模块提供正则表达式的支持。具体就不再在这里详说了,想学习正则的话,小编后续会在专栏详细介绍

python的Web编程,并不是利用Python开发Web程序,而是用Python与Web交互,获取Web信息。包括urllib,request等模块以及爬虫

urllib是Python用于获取URL(Uniform Resource Locators,统一资源定址器)的库函数,可以用来抓取远程数据并保存,甚至可以设置消息头(header)、代理、超时认证等

urllib模块提供的上层接口让我们像读取本地文件一样读取www或ftp上的数据。其常用的方法如下:urlopen(url, data=None, proxies=None)

该方法用于创建一个远程URL的类文件对象,然后像本地文件一样操作这个类文件对象来获取远程数据。参数url表示远程数据的路径,一般是网址;参数data表示以post方式提交到url的数据;参数proxies用于设置代理。urlopen返回一个类文件对象

# -*- coding:utf-8 -*-
import urllib
url = "http://www.baidu.com"
content = urllib.urlopen(url)
print content.info() #头信息
print content.geturl() #请求url
print content.getcode() #http状态码

    #该段调用调用urllib.urlopen(url)函数打开百度链接,并输出消息头、url、http状态码等信

    urlretrieve(url, filename=None, reporthook=None, data=None)

      urlretrieve方法是将远程数据下载到本地,参数filename指定了保存到本地的路径,如果省略该参数,urllib会自动生成一个临时文件来保存数据;参数reporthook是一个回调函数,当连接上服务器,相应的数据块传输完毕时会触发该回调,通常使用该回调函数来显示当前的下载进度;参数data指传递到服务器的数据

      # -*- coding:utf-8 -*-
      import urllib
      url = 'https://www.baidu.com/img/bd_logo.png'
      path = 'test.png'
      urllib.urlretrieve(url, path)
      #它将百度Logo图片下载至本地

        requests模块是用Python语言编写的、基于urllib的第三方库,采用Apache2 Licensed开源协议的http库。它比urllib更加方便,既可以节约大量的工作,又完全满足http测试需求。requests是一个很实用的Python http客户端库,编写爬虫和测试服务器响应数据时经常会用到

        网络爬虫:在安全领域,爬虫能做目录扫描、搜索测试页面、样本文档、管理员登录页面等。很多公司(如绿盟)的Web漏洞扫描也通过Python来自动识别漏洞。传统的爬虫代码会被网站拦截,从而无法获取相关信息。

        右键审查元素(按F12),在Network中获取Headers值。headers中有很多内容,主要常用的就是user-agent 和 host,它们是以键对的形式展现出来,如果user-agent 以字典键对形式作为headers的内容,就可以反爬成功

        小编曾经做过爬取文字的案例:

        准备在互联网 下载两个新的模块

        requests 代替 urllib模块 使用的一个浏览器
        bs4 beautiful soup 靓汤 可以分析html标签 可以精确查找标签 以及显示标签内容
        openpyxl python 制作execl 表格使用的
        前提 让windows python使用国内的源下载数据
        在家目录建立一个名为 pip的文件夹,建立一个名为pip.ini 的文件 配置文件。
        [global]
        timeout = 6000
        index-url = https://pypi.tuna.tsinghua.edu.cn/simple
        trusted-host = pypi.tuna.tsinghua.edu.cn
        pip install bs4
        pip install requests
        pip install openpyxl
        #如果没有配置过国内源 也可以临时使用国内源下载
        pip install bs4 https://pypi.tuna.tsinghua.edu.cn/simple
        通过request获取主页数据
        #要求将北京市安全运维工程师岗位 进行批量获取第一页所有岗位信息 并写入excel表格
        #需要用一个程序过滤出该页面所有岗位的地址链接
        import job51page
        import re
        import openpyxl
        url = "https://search.51job.com/list/010000,000000,0000,00,9,99,安全运维工程师,2,1.html"
        headers = {'User-Agent':'Mozilla/5.0 \
        (Windows NT 10.0; Win64; x64; rv:73.0) Gecko/20100101 Firefox/73.0'}
        def get_joblist(url,headers):
        html = job51page.get_html(url,headers)
        joblist = re.findall("https://jobs.51job.com/.*/\d+\.html",html) #获取页面所有岗位地址列表
        #print(html)
        #print(joblist)
        return joblist
        def create_jobdb(joblist):

          "将所有地址都访问一遍后将内容获取 并写入excel表格中"

          wb = openpyxl.Workbook()
          ws = wb.active
          ws.append(["岗位名称","公司名称","薪资","岗位要求","职位诱惑","岗位信息","公司信息","网站地址"])
          for joburl in joblist:
          html = job51page.get_html(joburl,headers) #获取一条岗位地址页面的信息
          jobinfolist = job51page.get_text(html,joburl)
          ws.append(jobinfolist)
          wb.save("c:\\users\\allen\\desktop\\190451jobdb.xlsx")
          joblist = get_joblist(url,headers)
          create_jobdb(joblist)

            最后结果就是把涉及51北京网络安全运维的信息都爬到了一个EXCEL表中。爬图片的原理相同,就是寻找p标签

            部分网站如果涉及到翻页,需要获取所有页码的信息,最传统的方法是定义一个函数,然后设计一个循环,一次遍历不同页面的内容实现

            url_start = ""
            url_end = ""
            def lesson(url):
            ....
            for i in range(1,9)
            url = url_start+ str(i) + url_end
            lesson(url)

              如果遇到url始终不变的情况,一般是有设置了变量pagesnum,它标记为我们的页码,所以这里需要通过requests提交变量数据,就能实现翻页

              # -*- coding: utf-8 -*-
              import requests
              import time
              import datetime
              url = "http://www.hshfy.sh.cn/shfy/gweb/ktgg_search_content.jsp?"
              page_num = 1
              date_time = datetime.date.fromtimestamp(time.time())
              print date_time
              data = {
              "pktrqks": date_time,
              "ktrqjs": date_time,
              "pagesnum": page_num
              }
              print data
              content = requests.get(url, data, timeout=3)
              content.encoding='gbk'
              print content.text

                下面我们来说下Python的套接字通信

                Python网络通讯主要是C/S架构的,采用套接字实现。C/S架构是客户端(Client)和服务端(Server)架构,Server唯一的目的就是等待Client的请求,Client连上Server发送必要的数据,然后等待Server端完成请求的反馈,Server端进行设置,首先创建一个通信端点,让Server端能够监听请求,之后就进入等待和处理Client请求的无限循环中。Client编程相对Server端编程简单,只要创建一个通信端点,建立到服务器的链接,就可以提出请求了

                套接字是一种具有之前所说的“通信端点”概念的计算网络数据结构,最初套接字被设计用在同一台主机上多个应用程序之间的通讯,这被称为进程间通讯或IPC。网络化的应用程序在开始任何通信都必须创建套接字。相当于电话插口,没它无法通信,这个比喻非常形象。Python支持:AF_UNIX、AF_NETLINK、AF_INET,其中AF_INET是基于网络的套接字

                套接字分两种:基于文件型和基于网络的

                套接字是基于文件的,所以它们的底层结构是由文件系统来支持的。可以理解为同一台电脑上,文件系统确实是不同的进程都能进行访问的

                如果把套接字比作电话的查看——即通信的最底层结构,那主机与端口就相当于区号和电话号码的一对组合。一个因特网地址由网络通信必须的主机与端口组成。而且另一端一定要有人接听才行,否则会提示“对不起,您拨打的电话是空号,请查询后再拨”。同样你也可能会遇到如“不能连接该服务器、服务器无法响应”等。合法的端口范围是0~65535,其中小于1024端口号为系统保留端口

                面向连接的主要协议就是传输控制协议TCP。要创建TCP套接字就得创建时指定套接字类型为SOCK_STREAM。TCP套接字这个类型表示它作为流套接字的特点。由于这些套接字使用网际协议IP来查找网络中的主机,所以这样形成的整个系统,一般会由这两个协议(TCP和IP)组合描述,即TCP/IP

                无连接的主要协议是用户数据报协议UDP。要创建UDP套接字就得创建时指定套接字类型为SOCK_DGRAM。这个名字源于datagram(数据报),这些套接字使用网际协议来查找网络主机,整个系统叫UDP/IP

                使用socket模块的socket()函数来创建套接字。

                语法如下:socket(socket_family, socket_type, protocol=0)其中socket_family不是AF_VNIX就是AF_INET,socket_type可以是SOCK_STREAM或者SOCK_DGRAM,protocol一般不填,默认值是0。

                创建一个TCP/IP套接字的语法如下:tcpSock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

                创建一个UDP/IP套接字的语法如下:udpSock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

                由于socket模块中有太多属性,所以使用"from socket import *"语句,把socket模块里面的所有属性都带到命名空间中,大幅缩短代码。调用如下:tcpSock = socket(AF_INET, SOCK_STREAM)

                举个例子,服务器端:

                #!/usr/local/bin/python3
                import socket
                import os
                ip = "" #我哪个ip开放 空表示所有ip
                port = 5000 #我要开的端口
                s = socket.socket(socket.AF_INET,socket.SOCK_STREAM) #对象s 使用基于tcp协议的网络套接字
                s.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1) #关闭后不需要保存状态可以立即开启
                s.bind((ip,port)) #对象s 开始绑定ip和端口
                s.listen(1) #启动监听状态
                conn,addr = s.accept() #当与别人建立连接 addr变量存对方ip conn 连接的对象
                print(addr) #显示对方地址
                while True:
                data = conn.recv(10240) #接收对方字符串 #如果对方不发数据会卡住
                print(data) #打印对方发来的数据
                if data == b"byebye":
                break
                data = str(data,encoding="utf8")
                f = os.popen(data) #可以将命令的内容以读取的方式返回
                data2 = f.read()
                if data2 == "":
                conn.send(b"finish")
                else:
                conn.send(bytes(data2,encoding="utf8"))
                conn.close() #断开连接
                s.close() #关闭套结字
                客户端
                import socket
                ip = "192.168.86.11" #对方服务器ip地址
                port = 5000 #对方服务器的端口
                c = socket.socket(socket.AF_INET,socket.SOCK_STREAM) #链接对方使用tcp协议 对象建立
                c.connect((ip,port))
                while True:
                data = input("请输入命令:")
                data = bytes(data,encoding="utf8")
                c.send(data) #发送数据给对方
                data2 = c.recv(10240)
                print(str(data2,encoding="utf8"))
                if data == b"byebye":
                break
                c.close()

                  好了,就先写到这里,欢迎圈内的小伙伴多提意见和建议,小编也是在无涯学海中拼力划着一叶扁舟,让我们一起乘风破浪吧!

                  最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

                  上述所有都有配套的资料,这些资料,对于做【网络安全】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!凡事要趁早,特别是技术行业,一定要提升技术功底。

                  本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/22196.html

                  如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

                  相关文章

                  Ubuntu下mysql主从复制搭建

                  本文介绍mysql 8.4主从集群的搭建,从单个机器安装到集群的配置,整体走了一遍,希望对大家有帮助。mysql 8.4和之前的版本命令上有些变化,大家用来参考。 0、环境 ubuntu: 22.04mysql:8.4 1、安装mysql 1…

                  MAC快速本地部署Deepseek (win也可以)

                  MAC快速本地部署Deepseek (win也可以) 下载安装ollama 地址: https://ollama.com/ Ollama 是一个开源的大型语言模型(LLM)本地运行框架,旨在简化大模型的部署和管理流程,使开发者、研究人员及爱好者能够高效地在本地环境中实验和…

                  Spring Boot框架总结(超级详细)

                  前言 本篇文章包含Springboot配置文件解释、热部署、自动装配原理源码级剖析、内嵌tomcat源码级剖析、缓存深入、多环境部署等等,如果能耐心看完,想必会有不少收获。 一、Spring Boot基础应用 Spring Boot特征 概念: 约定优于配置&#…

                  易基因: ChIP-seq+DRIP-seq揭示AMPK通过调控H3K4me3沉积和R-loop形成以维持基因组稳定性和生殖细胞完整性|NAR

                  原文:ChIP-seqDRIP-seq揭示AMPK通过调控H3K4me3沉积和R-loop形成以维持基因组稳定性和生殖细胞完整性|NAR 大家好,这里是专注表观组学十余年,领跑多组学科研服务的易基因。 在饥饿等能量胁迫条件下,生物体会通过调整…

                  uniapp h5端和app端 使用 turn.js

                  前提:添加页后,添加页与当前页会重叠在一起,不知道为什么,没有找到解决办法 1.h5端 <template><view class"container"><view id"flipbook"><view class"page page1">Page 1</view><view class"page pag…

                  MySQL数据库(3)—— 表操作

                  目录 一&#xff0c;创建表 1.1 创建表的SQL 1.2 演示 二&#xff0c;查看表 三&#xff0c;修改表 四&#xff0c;删除表 常用的表操作会涉及到两种SWL语句 DDL&#xff08;Data Definition Language&#xff09;数据定义语言&#xff1a;建表、改表、删表等&#xff0…

                  【精调】LLaMA-Factory 快速开始4 自定义个一个sharegpt数据集并训练

                  数据格式说明 LLaMA Factory:微调LLaMA3模型实现角色扮演 数据集 参考 开源模型应用落地-DeepSeek-R1-Distill-Qwen-7B-LoRA微调-LLaMA-Factory-单机单卡-V100(一) 大神给出的数据集的讲解:注册 如

                  Unity 位图字体

                  下载Bitmap Font Generator BMFont - AngelCode.com 解压后不用安装直接双击使用 提前设置 1、设置Bit depth为32 Options->Export options 2、清空所选字符 因为我们将在后边导入需要的字符。 Edit->Select all chars 先选择所有字符 Edit->Clear all chars i…

                  open webui 部署 以及解决,首屏加载缓慢,nginx反向代理访问404,WebSocket后端服务器链接失败等问题

                  项目地址&#xff1a;GitHub - open-webui/open-webui: User-friendly AI Interface (Supports Ollama, OpenAI API, ...) 选择了docker部署 如果 Ollama 在您的计算机上&#xff0c;请使用以下命令 docker run -d -p 3000:8080 --add-hosthost.docker.internal:host-gatewa…

                  Servlet概述(Ⅰ)

                  目录 一、Servlet概述 演示 创建JavaWeb项目&#xff08;2017版本为例&#xff09; 1. 打开 IntelliJ IDEA 2. 选择项目类型 3. 配置框架 二、Servlet初识(熟练) 1.servlet说明 2.Servlet 接口方法 3.创建Servlet 4.JavaWeb请求响应流程 ​编辑 ​编辑 5.servlet…

                  Spring Cloud — Hystrix 服务隔离、请求缓存及合并

                  Hystrix 的核心是提供服务容错保护&#xff0c;防止任何单一依赖耗尽整个容器的全部用户线程。使用舱壁隔离模式&#xff0c;对资源或失败单元进行隔离&#xff0c;避免一个服务的失效导致整个系统垮掉&#xff08;雪崩效应&#xff09;。 1 Hystrix监控 Hystrix 提供了对服务…

                  DeepSeek 助力 Vue 开发:打造丝滑的 键盘快捷键(Keyboard Shortcuts)

                  前言&#xff1a;哈喽&#xff0c;大家好&#xff0c;今天给大家分享一篇文章&#xff01;并提供具体代码帮助大家深入理解&#xff0c;彻底掌握&#xff01;创作不易&#xff0c;如果能帮助到大家或者给大家一些灵感和启发&#xff0c;欢迎收藏关注哦 &#x1f495; 目录 Deep…

                  WPS接入deepseek-OfficeAI助手插件下载

                  功能简介 OfficeAI 助手 是一款免费的智能AI办公工具软件&#xff0c;专为 Microsoft Office 和 WPS 用户打造。 无论你是在寻找如何输入“打勾&#xff08;√&#xff09;符号”的方法&#xff0c;还是想知道“怎么在插入表格前添加文字”&#xff0c;或者“该用哪个公式”&a…

                  关系数据理论

                  一、函数依赖 若t1(X)t2(X),必有t1(Y)t2(Y),那么我们称属性组X函数确定属性组Y&#xff0c;或者说Y函数依赖于X。记为X->Y&#xff0c;其中X叫决定因素&#xff0c;Y叫依赖因素。 平凡函数依赖与非平凡函数依赖&#xff1a; 二、1-BCNF 评价关系模式“好坏”的理论标准就…

                  【C】队列与栈的相互转换

                  栈与队列是两种特点相反的数据结构&#xff0c;一个特点是后进先出&#xff0c;一个特点是先进先出&#xff0c;但是他们之间是可以相互转换的。 目录 1 用队列实现栈 1&#xff09; 题目解析 2&#xff09; 算法解析 &#xff08;1&#xff09; 结构(MyStack) &#xff…

                  有向图的强连通分量: Kosaraju算法和Tarjan算法详解

                  在上一篇文章中, 我们了解了图的最小生成树算法. 本节我们来学习 图的强连通分量(Strongly Connected Component, SCC) 算法. 什么是强连通分量? 在 有向图 中, 若一组节点内的任意两个节点都能通过路径互相到达(例如 A → B A \rightarrow B A→B 且 B → A B \rightarro…

                  如何为自己的 PDF 文件添加密码?在线加密 PDF 文件其实更简单

                  随着信息泄露和数据安全问题的日益突出&#xff0c;保护敏感信息变得尤为重要。加密 PDF 文件是一种有效的手段&#xff0c;可以确保只有授权用户才能访问或修改文档内容。本文将详细介绍如何使用 CleverPDF 在线工具为你的 PDF 文件添加密码保护&#xff0c;确保其安全性。 为…

                  面向机器学习的Java库与平台简介、适用场景、官方网站、社区网址

                  Java机器学习的库与平台 最近听到有的人说要做机器学习就一定要学Python&#xff0c;我想他们掌握的知识还不够系统、不够全面。本文作者给大家介绍几种常用Java实现的机器学习库&#xff0c;快快收藏加关注吧&#xff5e; Java机器学习库表格 Java机器学习库整理库/平台概念…

                  Kubernetes 使用 Kube-Prometheus 构建指标监控 +飞书告警

                  1 介绍 Prometheus Operator 为 Kubernetes 提供了对 Prometheus 机器相关监控组件的本地部署和管理方案&#xff0c;该项目的目的是为了简化和自动化基于 Prometheus 的监控栈配置&#xff0c;主要包括以下几个功能&#xff1a; Kubernetes 自定义资源&#xff1a;使用 Kube…

                  Hadoop初体验

                  一、HDFS初体验 1. shell命令操作 hadoop fs -mkdir /itcast hadoop fs -put zookeeper.out /itcast hadoop fs -ls / 2. Web UI页面操作 结论&#xff1a; HDFS本质就是一个文件系统有目录树结构 和Linux类似&#xff0c;分文件、文件夹为什么上传一个小文件也这…