黑客与渗透测试编程之道python3——网络编程(1)

本文介绍了套接字编程的基础知识,包括套接字的类型、家族及如何使用TCP和UDP进行网络通信。提供了TCP和UDP的客户端与服务器的示例代码,展示了如何创建套接字、连接、发送和接收数据。
Python3.8

Python3.8

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

套接字编程
简要介绍一下套接字:
   Socket我们普遍称之为“套接字”,套接字是计算机网络连接最基础的数据结构,任何计算机网络之间的通讯,都需要创建套接字。应用程序通常通过使用“套接字”来向网络发出请求或者应答网络请求,这样才使得计算机之间得以实现通讯。
   套接字家族有两种,一种是基于文件的(AF_UNIX),另外一种是面向网络的(AF_INET)。
   套接字的类型也可以分为SOCK_STREAM和SOCK_DREAM两种,前者指的是使用传输控制协议(TCP协议),在创建TCP套接字时使用,后者指的是用户数据报协议(UDP协议),同理,在创建UDP套接字时使用。

TCP客户端
文件名:tcpclient.py

# encoding = 'utf8'
from socket import *

HOST = "www.baidu.com"                    #设置主机ip
PORT = 80                                 #配置端口号
BUFSIZ = 4096                             # 4kb
ADDR = (HOST,PORT)            

client = socket.socket(socket.AF_INET,socket.SOCK_STREAM)      #声明socket类型,同时创建socket对象
client.connect(ADDR)                      #连接客户端

data = "GET / HTTP/1.1\r\nHost:baidu.com\r\n\r\n"
client.send(bytes(data,'utf8'))           #发送一条数据

response = client.recv(BUFSIZ)            #接收一条信息

print(response)

UDP客户端
文件名:udpclient.py

import socket

HOST = '127.0.0.1'
PORT = 9999
BUFSIZ = 4096
ADDR = (HOST,PORT)

client = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)    #建立一个socket对象

client.sendto(str.encode('AAABBBCCC'),ADDR)                 #发送一些数据

data,addr = client.recvfrom(BUFSIZ)
print(data)

UDP服务器
文件名:udpserver.py

import socket

HOST = '127.0.0.1'
PORT = 9999
BUFSIZ = 4096
ADDR = (HOST,PORT)

s = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
s.bind(ADDR)

while True:
	data,addr = s.recvfrom(BUFSIZ)
	print('Received from %s:%s.'% addr)
	s.sendto(b'Hello,I receive:%s'% data,addr)     #b: 表示二进制字符串,括号内的内容原样输出

   这里添加了UDP客户端,仅供参考

TCP服务器
文件名:tcpserver.py

import socket
import threading

HOST = '0.0.0.0'                             #绑定到所有的网络地址
PORT = 9999
ADDR = (HOST,PORT)

server = socket.socket(socket.AF_INET,socket.SOCK_STREAM)         #创建socket对象
server.bind(ADDR)                            #绑定端口号
server.listen(5)                             #设置最大连接数为5

print("[*] listen on %s:%d" % ADDR)

def handle_client(client_socket):            #客户端处理线程
	request = client_socket.recv(1024)       #打印出客户端发送得到的内容
	print("[*] Received: %s" % request)      #打印出接收数据
	client_socket.send(str.encode('ACK!'))    #返还一个数据包
	client_socket.close()

while True:
	client,addr = server.accept()                                           #建立客户端连接
	print("[*] Accepted connection from: %s: %d" % (addr[0],addr[1]))       # 打印连接地址
	client_handler = threading.Thread(target=handle_client,args=(client,))  #创建一个线程对象
	client_handler.start()                                                  #启动线程

运行上述的TCP服务器与客户端将会得到如下结果:
上图为服务端的输出数据显示上图为客户端的输出数据显示   这只是一种最基础的套接字使用范例,上述代码均经过实际验证,读者通过更改IP和端口号以及数据传输的相关控制代码可以实现不同细节的网络连接,上述使用代码中对其它博客以及相关书籍均略有参考,在此不一一举例了。浅陋文字,望各位同好者都学有所获!对上述博客还有不同意见也欢迎指点评价!

您可能感兴趣的与本文相关的镜像

Python3.8

Python3.8

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值