python渗透测试入门——基础的网络编程工具
《Python黑帽子——黑客与渗透测试编程之道学习》这本书是我在学习安全的过程中发现的在我看来十分优秀的一本书,业内也拥有很高的评价,所以在这里将自己的学习内容分享出来。
1.基础的网络编程工具。
实验环境:vscode+kali虚拟机
(1)TCP客户端
from ctypes.wintypes import tagRECT
from http import client
from pydoc import cli
import socket
from urllib import response target_host = "www.baidu.com"
target_port = 80 client = socket.socket(socket.AF_INET,socket.SOCK_STREAM) client.connect((target_host,target_port)) client.send(b"GET / HTTP/1.1\r\nHost:baidu.com\r\n\r\n") response =client.recv(4096) print(response.decode()) client.close()
首先创建一个带有AF_INET和SOCK_STREAM参数的socket对象。AF_INET参数表示我们将使用标准的IPv4地址或主机名,SOCK_STREAM表示这是一个TCP客户端。然后,我们将该客户端连接到服务器,并发送一些bytes类型的数据。最后一步,接收返回的数据并将其打印到屏幕上,再关闭socket。以下是运行结果。
(2) UDP客户端
from http import client
import socket target_host = "127.0.0.1"
target_port = 80 client = socket.socket(socket.AF_INET,socket.SOCK_DGRAM) client.sendto(b"AAABBBCCC",(target_host,target_port)) data, addr = client.recvfrom(4096) print(data.decode()) client.close()
UDP客户端和TCP客户端相差不大,并且作用也相去不远,在创建socket对象时,需要将socket类型改成SOCK_DGRAM,之后调用sendto()函数即可。UDP是一个无连接协议,所以不需要connect()函数建立连接。recvfrom()函数不仅返回接收到的数据,还会返回详细的数据来源信息(主机名和端口号)。。
(3)TCP服务端(多线程)
from http import client, server
import socket
import threading
from urllib import request IP = '0.0.0.0'
PORT = 9998 def main():
server = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
server.bind((IP,PORT))
server.listen(5)
print(f'[*] Listening on {IP}:{PORT}') while True:
client, address = server.accept()
print(f'[*] Accepted connection from {address[0]}:{address[1]}')
client_handler = threading.Thread(target=handle_client, args=(client,))
client_handler.start() def handle_client(client_socket):
with client_socket as sock:
request = sock.recv(1024)
print(f'[*] Received: {request.decode("utf-8")}')
sock.send(b'ACK') if __name__ == '__main__':
main()
我们先指定服务器应该监听哪个IP地址和端口。接着,让服务器开始监听,并把最大连接数设为5。下一步,让服务器进入主循环中,并在该循环中等待外来连接。当一个客户端成功建立连接的时候,将接收到的客户端socket对象保存到client变量中,将远程连接的详细信息保存到address变量中。然后,创建一个新的线程,让它指向handle_client函数,并传入client变量。创建好后,我们启动这个线程来处理刚才收到的连接,与此同时服务端的主循环也已经准备好处理下一个外来连接。而handle_client函数会调用recv()接收数据,并给客户端发送一段简单的回复。那么我们用前面写好的TCP客户端给服务端发送几个测试包。
首先开启服务端:
在客户端发送测试包,即可看到:
这次的分享先到这里,下一次将扩充这次这几个实验的功能。
python渗透测试入门——基础的网络编程工具的更多相关文章
- python渗透测试入门——取代netcat
1.代码及代码讲解. 实验环境:windows10下的linux子系统+kali虚拟机 import argparse import socket import shlex import subpro ...
- Android渗透测试Android渗透测试入门教程大学霸
Android渗透测试Android渗透测试入门教程大学霸 第1章 Android渗透测试 Android是一种基于Linux的自由及开放源代码的操作系统,主要用于移动设备,如智能手机.平板等.目前 ...
- 智普教育Python视频教程之入门基础篇,python笔记
智普教育Python视频教程之入门基础篇,python笔记 print id()内存地址 type()变量类型 windows命令行下edit命令 python数据类型不需要指定类型 定义hostna ...
- 黑马程序员:Java基础总结----网络编程
黑马程序员:Java基础总结 网络编程 ASP.Net+Android+IO开发 . .Net培训 .期待与您交流! 网络编程 网络通讯要素 . IP地址 . 网络中设备的标识 . 不易记忆,可用 ...
- Python学习day34-面向对象和网络编程总结
figure:last-child { margin-bottom: 0.5rem; } #write ol, #write ul { position: relative; } img { max- ...
- GO学习-(19) Go语言基础之网络编程
Go语言基础之网络编程 现在我们几乎每天都在使用互联网,我们前面已经学习了如何编写Go语言程序,但是如何才能让我们的程序通过网络互相通信呢?本章我们就一起来学习下Go语言中的网络编程. 关于网络编程其 ...
- Python 渗透测试编程技术方法与实践 ------全书整理
1.整个渗透测试的工作阶段 ( 1 )前期与客户的交流阶段.( 2 )情报的收集阶段.( 3 )威胁建模阶段.( 4 )漏洞分析阶段.( 5 )漏洞利用阶段.( 6 )后渗透攻击阶段.( 7 )报告阶 ...
- 周末班:Python基础之网络编程
一.楔子 你现在已经学会了写python代码,假如你写了两个python文件a.py和b.py,分别去运行,你就会发现,这两个python的文件分别运行的很好.但是如果这两个程序之间想要传递一个数据, ...
- python基础(29):网络编程(软件开发架构、网络基础、套接字初使用)
1. 软件开发架构 我们了解的程序之间通讯的应用可分为两种: 第一种是应用类:qq.微信.百度网盘.腾讯视频这一类是属于需要安装的桌面应用. 第二种是web类:比如百度.知乎.博客园等使用浏览器访问就 ...
随机推荐
- Radmin自动登录器 v3.0
Radmin自动登录器 v3.0 - By: ybmj@vip.163.com 20150615 用户手册 下载地址:https://download.csdn.net/download/shuren ...
- (防坑)Alphafold 非docker 安装指南
本指南适用于Linux系统.Alphafold官方也强调尽量使用Linux系统!官方提供了docker版安装步骤. Alphafold简介: 强大的蛋白质结构预测. 开源地址:https://gith ...
- 在 Linux 安装 Java 的流程
前言 安装流程一共为 4 个步骤,分为下载.解压.配置.检查. 下载 Oracle 官网下载 JDK. 解压 上传至 Linux 中(可使用宝塔面板上传),解压安装包: ubuntu@VM-0-6-u ...
- z—libirary最新地址获取,zlibirary地址获取方式,zliabary最新地址,zliabary官网登录方式,zliabary最新登陆
Z-Library(缩写为z-lib,以前称为BookFinder)是Library Genesis的镜像,一个影子图书馆项目,用于对学术期刊文章.学术文本和大众感兴趣的书籍(其中一些是盗版的)进行文 ...
- 【JDBC】学习路径9-dbcp数据源的使用
第一章:下载 要下载三个东西:commons pool.commons log.dbcp dbcp中有些东西是依赖于commons pool 和 commons log 的. 缺一不可,否则无法正确运 ...
- Go语言知识查漏补缺|基本数据类型
前言 学习Go半年之后,我决定重新开始阅读<The Go Programing Language>,对书中涉及重点进行全面讲解,这是Go语言知识查漏补缺系列的文章第二篇,前一篇文章则对应书 ...
- setContentView源码分析
当我们在Activity中调用setContentView,它到底做了什么呢 override fun onCreate(savedInstanceState: Bundle?) { super.on ...
- 03_Django-GET请求和POST请求-设计模式及模板层
03_Django-GET请求和POST请求-设计模式及模板层 视频:https://www.bilibili.com/video/BV1vK4y1o7jH 博客:https://blog.csdn. ...
- day35-IO流02
JavaOI流02 4.常用的类 4.1文件字节流输入流-FileInputStream InputStream抽象类是所有类字节输入流的超类 InputStream常用的子类: FileInputS ...
- Python数据科学手册-机器学习: 流形学习
PCA对非线性的数据集处理效果不太好. 另一种方法 流形学习 manifold learning 是一种无监督评估器,试图将一个低维度流形嵌入到一个高纬度 空间来描述数据集 . 类似 一张纸 (二维) ...