首页 > 编程语言 >python渗透测试入门——基础的网络编程工具

python渗透测试入门——基础的网络编程工具

时间:2022-10-24 15:35:43浏览次数:52  
标签:入门 python 编程 SOCK client target import 客户端 socket

《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,编程,SOCK,client,target,import,客户端,socket
From: https://www.cnblogs.com/yaolingyu/p/16821362.html

相关文章

  • c语言小程序(编程c++和python的区别)
    c语言小程序例题,大师看看怎么办?写入三角形的三条边a,b,c,假如能构成1个三角形,输出面积area和周长perimeter(保留2位小数);否则,输出“Thesesidesdonotcorrespondtoa......
  • Netty入门-ButeBuf
    3.5、ByteBuf3.5.1、创建//结果:初始容量256,扩容到512//PooledUnsafeDirectByteBuf(ridx:0,widx:0,cap:256)//PooledUnsafeDirectByteBuf(ridx:0,widx:300,cap......
  • python retry装饰器
    fromfunctoolsimportwrapsimporttime#defretry(retry_time,retry_on_result,time_wait):#deftest(func):#@wraps(func)#defwrapp......
  • Netty入门-Future & Promise
    3.3、Future&PromiseNetty中的Future与Jdk中Future同名,但是是两个接口,继承关系:Promise---extends-->Future(Netty)-----extend--->Future(JDK)区别:jdkFuture只能......
  • Netty入门-Handler & Pipeline
    3.4、Handler&PipelineChannelHandler用来处理Channel上的各种事件,分为入站、出站两种。所有ChannelHandler被连成一串,就是Pipeline入站处理器通常是ChannelIn......
  • Netty入门-Hello World
    Netty入门1、Netty优势NettyVSNIO,工作量大,bug多需要自己构建协议解决TCP传输问题,如黏包,半包epoll空轮询导致cpu100%对API进行增强,ThreadLocal-->FastThreadLocal......
  • Python正则表达式(Python RegEx)
    Python正则表达式目录Python正则表达式快速参考函数详解match()search()捕获和分组Match对象sub()compile()findall()finditer()split()参考博客与示例代码快速参考常用......
  • c语言编程代码大全(c语言简单代码大全)
    html代码和c语言等编程语言有什么联系吗?HTML叫做超文本标记语言(标准通用标记语言下的一个应用)或超文本链接标示语言,是目前网络上应用最为广泛的语言,也是构成网页文档的主......
  • windows下安装dmPython
    环境:OS:Windows10python:3.6.5DM:DM81.windows下安装达梦客户端2.安装dmPythonC:\dmdbms\drivers\python\dmPython>pythonsetup.pyinstallrunninginstallrunnin......
  • Python 中 logging 模块的使用
    Python中logging模块的使用logging模块简介Python的logging模块提供了通用的日志系统,可以方便第三方模块或者是应用使用。这个模块提供不同的日志级别,并可以采用不同......