python渗透测试---第二章:网络编程

一、TCP客户端

import socket 

target_host="www.baidu.com"
target_port=80

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

#连接客户端
client.connect((target_host,target_port)) 

#发送一些数据
client.send("GET / HTTP/1.1\r\nHost: www.baidu.com\r\n\r\n")

#接受一些数据
response=client.recv(4096)

print(response)

首先,我们建立一个包含AF_INET和SOCK_STREAM的参数socket对象,AF_INET参数说明我们使用标准的IPv4地址或者主机名,SOCK_STREAM说明这将是一个TCP客户端,然后我们将客户端连接到服务器

存在问题:
1、我们假设我们总是连接成功,不会出现问题
2、假设客户总是先向服务器发送数据(服务器也会向你发送数据)
3、假设服务器每次都及时返回数据

二、UDP客户端

import socket 

target_host="127.0.0.1"
target_port=80

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

#发送一些数据
client.sendto("AABBCC",(target_host,target_port))#2

#接受回传数据及远程主机的信息和端口
data,addr=client.recvfrom(4096)

print(data)

1:我们将套接字类型改成SOCK_DGRAM
2:UDP是一个无连接状态的传输协议,所以不需要调用connect()函数

三、TCP服务端

import  socket
import threading
 
bind_ip="127.0.0.1"
bind_port=9999

server=socket.socket(socket.AF_INET,socket.SOCK_STREAM)

server.bind((bind_ip,bind_port))#(1)

server.listen(5)#(2)

print("[*] listenting on %s:%d"%(bind_ip,bind_port))

#这是客户端处理线程
def handle_client(client_socket): #(3)
	
	#打印出客户端发送的内容
	request=client_socket.recv(1024)
	print("[*] received:%s" %reques)

	#返还一个数据包
	client_socket.send("ACK!")
	client_socket.close()

while True:
	client,addr=server.accept()#(4)
	print("[*] Accepted connection from :%s:%d"%(addr[0],addr[1]))

	#挂起客户端线程,处理传入的数据
	client_handler=threading.Thread(target=handle_client,args=(client,))
	client_handler.start()#(5)

我们确定服务器需要监听的ip地址和端口(1),然后我们启动监听(2)并将最大连接数设置成为5。下一步,我们让服务端进入到主循环,等待连接。客户端成功连接时(4),我们将接受到客户端套接字对象保存到client变量当中,将远程连接的细节保存到addr变量中。接着我们以handle_client为回调函数创建一个新的线程对象,将客户端套接字对象作为一个句柄传递给他,我们启动线程处理客户端连接(5)handle_client函数执行(3)执行recv()函数之后将信息发送给客户端。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值