Python安全攻防-从入门到入狱

居家隔离闲着无聊
思来想去决定写篇关于 【 P y t h o n 攻 防 】 \color{blue}{【Python攻防】} Python专栏
没办法-越🥦越想学

请添加图片描述
网上有《Python安全攻防》📕
想深入学习的👦可以买
我没买–毕竟我喜欢白嫖🤪

⛰前言⛰

  • 随着近几年互联网的发展,Python在各行各业发挥着举足轻重的作用。除应用在科学计算、大数据处理等人们熟知的领域外,在信息安全领域中使用也异常广泛。这是因为对于渗透测试工程师来说Python语言不仅上手容易,而且还有大量丰富的开源库。通过Python可以帮助他们又好又快的完成一项任务,以少量的代码便可实现所需功能。从而借助Python打造更安全的💻。

国家网络安全法

敲重点👉中华人民共和国网络安全法👈建议倒背如流

🌋正文🌋

一、Socket网络编程

网络调试助手https://pan.baidu.com/s/1Do-v8XMDaIYJsXRQok5RhQ 提取码:ya4g (便于测试)

  套接字(Socket)是计算机之间进行通信的一种约定。通过Socket,一台计算机可以接受其他计算机的数据,也可以向其他计算机发送数据。远程管理软件和黑客软件大多依赖于Socket来实现特定功能的,其包括两个部分:运行于服务器端称之为ServerSocket,运行于客户机端称之ClientSocket。

TCP

TCP是因特网中的传输层协议,使用三次握手协议建立连接。

在这里插入图片描述

TCP_Client.py

import socket


def main():
	# 创建TCP套接字
	tcp_client_socket = socket.socket(socket.AF_INET,socket.SOCK_STREAM)

	# 服务器地址
	sever_ip = input("请输入服务器ip:")
	sever_port = input("请输入服务器端口:")

	# 连接服务器(元组)
	tcp_client_socket.connect((sever_ip,int(sever_port)))

	# 输入发送的数据
	data = input("请输入要发送的数据:")

	# 发送数据
	tcp_client_socket.send(data.encode("utf-8"))

	#接收数据
	recv_data = tcp_client_socket.recv(1024)
	print("对方的回复:"recv_data.decode("utf-8"))

if __name__ == '__main__':
	main()

nc -lvp 8888 监听8888端口
(一次完整对话)
在这里插入图片描述
TCP_Sever.py

import socket

def main():
    # 创建套接字
    tcp_server_socket = socket.socket(socket.AF_INET,socket.SOCK_STREAM)

    # 绑定本地IP和端口
    tcp_server_socket.bind(("192.168.12.1",8888))

    # 被动 listen
    tcp_server_socket.listen(128)

    while True:
        # 等待客户端信息
        print("等待客户端连接")
        client_socket,client_addr = tcp_server_socket.accept()
        print("客户端为:",client_addr)

        #接收对方发送数据
        recv_data = client_socket.recv(1024)
        print("接收到信息为:",recv_data.decode("utf-8"))

        #发送数据到客户端
        client_socket.send("Yasso".encode("utf-8"))
        client_socket.close()

if __name__ == "__main__":
    main()

在这里插入图片描述

UDP

UDP 为应用程序提供了一种无需建立连接就可以发送封装的 IP 数据包的方法。

在这里插入图片描述

UDP_Client_send.py

import socket
#创建udp套接字
udp_socket = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
# 目标ip和端口
target_addr = ('192.168.12.128',8888)

#获取数据
data = input("请输入要发送的数据:")

#发送数据
udp_socket.sendto(data.encode('utf-8'),target_addr)

udp_socket.close()

UDP_Client_receive.py

import socket
#创建udp套接字
udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

local_addr=('192.168.12.128',8888) 
#绑定ip(必须本地)和端口
udp_socket.bind(local_addr)

#等待接受对方发送的数据
recv_data = udp_socket.recvfrom(1024) #表示本次接受的最大字节数1024

# 显示接受的数据
print(recv_data[0].decode('utf-8'))
udp_socket.close()

liunx等待接受数据->win10发送数据->liunx成功接收数据
在这里插入图片描述
nc -ulp 8888 监听udp模式下的8888端口
在这里插入图片描述

私密聊天室

# UDP应用-私密聊天室(极简)
import socket


def send(chat_ip,chat_port):
	udp_socket = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
	"""发送消息"""
	address = (chat_ip,int(chat_port))
	print(address)
	data = input("请输入发送的消息:")
	udp_socket.sendto(data.encode("utf-8"),address)


def receive():
	"""接收消息"""
	udp_socket = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
	# 绑定本地IP和端口
	udp_socket.bind(("192.168.12.1",8888))
	recv_data = udp_socket.recvfrom(1024)
	print(recv_data[0].decode('utf-8'))


def main():
	chat_ip = input("请输入您聊天对方IP地址:")
	chat_port = input("请输入您聊天对方端口:")

	# 循环调用
	while True:
		print("++++++欢迎进入私密聊天室++++++")
		print("0:发送消息")
		print("1:接收消息")
		print("2:退出聊天")
		function = input("请输入您要用的模块")

		if function == "0":
			send(chat_ip,chat_port)
		elif function == "1":
			receive()
		elif function == "2":
			break
		else:
			print("输入有误,请重新输入")



if __name__ == '__main__':
	main()

在这里插入图片描述

二、Scapy网络嗅探

Scapy是一个可以让用户发送、侦听和解析并伪装网络报文的Python程序。这些功能可以用于制作侦测、扫描和攻击网络的工具

pip install scapy 安装scapy
pip install ipython安装交互式shell

  Scapy是一个强大的交互式包操作程序。它能够伪造或解码大量协议的数据包,在网络上发送它们,捕获它们,匹配请求和响应,等等。Scapy可以轻松地处理大多数经典任务,如扫描、跟踪、探测、单元测试、攻击或网络发现。它可以代替hping、arpsoof、arp-sk、arping、p0f甚至Nmap、tcpdump和tshark的某些部分

TCP发送数据

TCPsend.py

# -- coding: utf-8 --
import time
import threading
import sys
from scapy.all import *
 
 
# 数据包应用层数据部分
data = 'flag{flag_is_not_here}'

# src:源地址 、sport:源端口、dst:目标地址、dport:目标端口
pkt = IP(src='192.168.12.128', dst='192.168.12.166') / TCP(sport=4444, dport=6666) / data

# 间隔一秒发送一次   总共发送5次   发送网卡口(iface):eth0
send(pkt, inter=1, count=5, iface="eth0")

在这里插入图片描述

基于ICMP协议的存活主机探测

  ICMP协议是一种面向无连接的协议,用于传输出错报告控制信息。它是一个非常重要的协议,它对于网络安全具有极其重要的意义。 属于网络层协议,主要用于在主机与路由器之间传递控制信息,包括报告错误、交换受限控制和状态信息等。当遇到IP数据无法访问目标、IP路由器无法按当前的传输速率转发数据包等情况时,会自动发送ICMP消息。

判断是否为活跃主机,只需要向其发送一个ICMP请求,如果这台主机处于活跃状态,那么它在收到这个请求之后就会给出一个回应。

# -- coding: utf-8 --
from scapy.all import *
# 构造IP包头构造ICMP包头加载发送数据包函数

for i in range(1,254):      # 整个个网段
     ip="192.168.12."+str(i)    # 设置IP地址
     pkt=IP(dst=ip,src="192.168.12.128")/ICMP(type="Echo-request") #ICMP包的类型为Echo request——回显请求(Ping请求)
     rep=sr1(pkt,timeout=1,verbose=False) # 发送和接受数据包,超时时间为1秒,设置无过程回显。
     # 如果该数据包有回应则输出
     if rep:
        print("The  " + rep[IP].src + "  is live")

在这里插入图片描述

基于TCP/UDP的主机发现

基于TCP、UDP的主机发现属于四层主机发现是一个位于传输层的协议。可以用来探测远程主机存活、端口开放、服务类型以及系统类型等信息,相比于三层主机发现更为可靠用途更广.

TCP
工作原理主要依据目标主机响应数据包中flags字段,如果flags字段有值,则表示主机存活,该字段通常包括SYN、FIN、ACK、PSH、RST、URG六种类型。SYN表示建立连接,FIN表示关闭连接,ACK表示应答,PSH表示包含DATA数据传输,RST表示连接重置,URG表示紧急指针。

# -- coding: utf-8 --
from scapy.all import *

for i in range(1,254):      # 整个个网段
     ip="192.168.12."+str(i)    # 设置IP地址
     pkt=IP(dst=ip)/TCP(flags="A",dport=4444) #响应数据包中flags值判断主机是否存活
     rep=sr1(pkt,timeout=1,verbose=False) # 发送和接受数据包,超时时间为1秒,设置无过程回显。
     if rep:
# 如果该数据包有相应则输出
        print("The  " + rep[IP].src + "  is live")

UDP
UDP是向目标主机一个没有开放的端口发送数据,目标主机会返回一个目的端口不可达的ICMP报文,以此来判断主机是否在线。如果主机不在线,或者目标端口开放,UDP探测是不会收到响应包的。

# -- coding: utf-8 --
from scapy.all import *

for i in range(1,254):      # 整个个网段
     ip="192.168.12."+str(i)    # 设置IP地址
     pkt=IP(dst=ip)/UDP(dport=6666) 
     rep=sr1(pkt,timeout=1,verbose=False) # 发送和接受数据包,超时时间为1秒,设置无过程回显。
     if rep:
# 如果该数据包有相应则输出
        print("The  " + rep[IP].src + "  is live")

wireshark拦截
在这里插入图片描述

基于ARP协议的主机发现

地址解析协议,即ARP,是根据IP地址获取物理地址的一个TCP/IP协议。主机发送信息时将包含目标IP地址的ARP请求广播到局域网络上的所有主机,并接收返回消息,以此确定目标的物理地址;收到返回消息后将该IP地址和物理地址存入本机ARP缓存中并保留一定时间,下次请求时直接查询ARP缓存以节约资源。

ARP
对以太网内的每个主机都进行ARP请求。若主机存活,则会响应我们的ARP请求,否则不会响应.因为ARP涉及网络层和数据链路层所以需要使用Scapy中的Ether和ARP。

# -- coding: utf-8 --
from scapy.all import *

for i in range(1,254):      # 整个个网段
     ip_list=[]
     ip="192.168.12."+str(i)    # 设置IP地址
     # 发送ARP包
     # 二层发包,需要添加以太网头部,所以要写成Ether/ARP
     # 因为最底层用到了二层,所以要用srp()发包
     ans=srp(Ether(dst='FF:FF:FF:FF:FF:FF')/ARP(op=1,pdst=ip,hwdst='00:00:00:00:00:00'),timeout=1,verbose=False)
     if ans[0].res:
        print("The  "+ip+"  is live")

在这里插入图片描述

三、信息搜集

IP查询

IP查询是通过当前所获取到的URL去查询对应IP地址的过程。可以应用Socket库函数中的gethostbyname()获取域名所对应的IP值°

import socket
domain = input("请输入要查询的域名:")
ip = socket.gethostbyname(domain)
print("IP地址为:",ip)

在这里插入图片描述

Whois查询

whois模块查询域名www.baidu.com的注册信息

pip install python-whois 安装模块

from whois import whois
data = whois('www.baidu.com')
print(data)

在这里插入图片描述

子域名挖掘

域名可以分为顶级域名、—级域名、二级域名等。子域名(subdomam)是顶级域名(一级域名或父域名)的下—级。例如mail.example.com和calendar.example.com是example.com的两个子域,而example.com则是顶级域.com的子域。在测试过程中测试目标主站时如果未发现任何相关漏洞,此时通常会考虑⛏︎目标系统的子域名。子域名⛏︎方法有很多种

  • 43
    点赞
  • 252
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 8
    评论
### 回答1: 《Python 和 Pygame 写游戏 - 从入门到精通.pdf》是一本关于使用Python语言和Pygame库编写游戏的书籍。Python是一种简单易学的编程语言,具有丰富的库和工具,非常适合初学者入门。而Pygame是为了方便开发2D游戏而设计的库,提供了丰富的函数和类,可以帮助开发者轻松地创建游戏。 这本书的目标是帮助读者从游戏开发的基础知识入手,逐步了解Python和Pygame的使用方法,并逐渐提高到精通水平。书中按照渐进式的学习方式,从基本的Python语法开始介绍,然后逐步引入Pygame库的功能和特性。读者可以学习如何创建游戏窗口,绘制图形和精灵,处理用户输入,实现游戏逻辑等。 此外,书中还涵盖了一些高级的游戏开发技术,比如碰撞检测、音效处理、动画效果和物理模拟等。通过学习这些内容,读者将能够掌握更多复杂游戏的开发方法,并能够自己设计和实现自己的游戏。 总的来说,《Python 和 Pygame 写游戏 - 从入门到精通.pdf》是一本适合初学者和有一定编程基础的读者学习游戏开发的书籍。读者可以通过学习这本书,掌握使用Python和Pygame开发游戏的基本技能,从而进一步提升自己在游戏开发领域的能力。 ### 回答2: 《Python 和 Pygame 写游戏-从入门到精通》是一本关于使用Python编程语言和Pygame游戏开发库来编写游戏的指南。它逐步介绍了从入门到精通的过程,并教会读者如何利用Python和Pygame创建自己的游戏。 Python是一种简单易学的高级编程语言,被广泛应用于各种领域,包括游戏开发。Pygame是一个基于Python的库,专门用于开发2D游戏。它提供了许多功能强大的工具和函数,可以帮助开发者处理游戏图形、声音、输入等方面的内容。 《Python 和 Pygame 写游戏-从入门到精通》一书首先向读者介绍了Python和Pygame的基础知识,包括安装和配置开发环境以及Python和Pygame的基本语法和功能。然后,它逐渐深入探讨了游戏开发的不同方面,包括游戏循环、图形绘制、碰撞检测、游戏物理等。书中使用了大量的示例代码和实际案例来帮助读者理解和应用所学知识。 通过学习《Python 和 Pygame 写游戏-从入门到精通》,读者将获得从入门到精通的游戏开发技能。他们将学会创建各种类型的游戏,从简单的益智游戏到复杂的角色扮演游戏。此外,书中还提供了一些高级技巧和技术,如使用人工智能和网络功能来增强游戏体验。 总之,这本书是一本全面而深入的学习资源,适合那些希望利用Python和Pygame开发游戏的初学者和有经验的开发者。它将引导读者从零开始掌握游戏开发的基本技能,并帮助他们创建自己的精彩游戏作品。 ### 回答3: 《Python和Pygame写游戏-从入门到精通.pdf》是一本专门介绍如何使用Python及其游戏开发库Pygame来编写游戏的书籍。 Python是一种高级编程语言,易于学习和使用。它具有简洁的语法和丰富的标准库,可以进行各种编程任务,包括游戏开发。Pygame是一个基于Python的开源游戏开发库,提供了丰富的功能和工具,方便开发者进行游戏的设计和制作。 这本书从入门到精通的目标,意味着它适合各种编程经验水平的读者。对于初学者,它会介绍Python和Pygame的基本知识和概念,例如变量、条件语句、循环和函数等。然后,它将引导读者学习如何使用Pygame库中的各种功能和模块来创建游戏窗口、处理用户输入、绘制图形等。通过实际的示例和练习,读者可以逐步掌握游戏设计和开发的基本技能。 对于有一定编程经验的读者,本书也提供了更高级的内容和技巧,例如碰撞检测、动画效果、游戏物理学等。读者可以通过这些深入的学习,进一步提升自己的游戏开发能力,设计出更加有趣和复杂的游戏。 总的来说,《Python和Pygame写游戏-从入门到精通.pdf》是一本对于想要学习如何使用Python和Pygame编写游戏的读者来说非常有价值的书籍。通过它的指导,读者可以系统地学习游戏开发的基础知识和技能,并逐步提高自己的水平,成为一名优秀的游戏开发者。
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

{Yasso}

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值