Python黑帽子第二章网络编程学习笔记

Python黑帽子之网络编程

相信小伙伴都听说python语言在渗透领域的应用极为广泛,今天就来说说《python黑帽子》中的网络编程中TCP UDP服务器及客户端,使用原始套接字等所必须的代码,有兴趣的小伙伴可以点下面的连接去阅读这本书。

本书的下载地址

链接:https://pan.baidu.com/s/1q1uQOvsB382hsoAPE6H39w
提取码:xkn1

TCP客户端

import socket
target_host = "www.google.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: google.com\r\n\r\n")
#接收一些数据
response =client.recv(4096)
print response

首先我们先建立一个包含AF_INET和SOCK_STREAM参数的socket对象,AF_INET参数说明我们将使用标准的IPv4地址或者主机名,SOCK_STREAM说明这将是一个TCP客户端。然后,我们将客户端连接到服务器,并发送一些简数据。最后一步是接受返回的数据并相应数据打印出来(简单来说就是先建立一个socket的对象,对象里面有两个参数,第一个参数代表使用Ipv4,第二个参数代表此对象是一个TCP客户端对象,之后进行连接,发送数据,接受响应数据,打印响应数据)

UDP客户端

import socket
target_host = "127.0.0.1"
target_port = 80
#建立一个socket对象
client = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)

#发送一些数据
client.sendto("AAABBBCCC",(target_host,target_port))
#接收一些数据
data,addr = client.recvfrom(4096)

print data

正如你所看到的,我们将socket.SOCK_STREAM改为socket.SOCK_DGRAM,之后调用了sendto()函数将数据发送到想发送的服务器上,因为UDP是一个无连接状态的传输协议,所以不需要在此之前调用连接函数 connect() 最后一步是调用 revcfrom()函数 接受返回的UDP数据包,这样就能够接受到回传的数据及远程主机的信息和端口号
send函数需要建立连接所以用在TCP中而sendto函数可以指定服务器的地址及端口,由于TCP需要三次握手连接建立一个持续可靠的连接,而UDP则并不需要建立连接只负责发送并不理睬服务器是否收到,所以在使用函数上有所不同

TCP服务器

import socket
import threading
bind_ip ="0.0.0.0"
bind_port =9999
server = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
server.bind((bind_ip,bind_port))

server.listen(5)
print"[*] lstening on %s:%d"  %(bind_ip,bind_port)

#客户端处理线程
def handle_client(client_socket):
  #打印出客户端发送得到内容
   request = client_socket.recv(1024)
   print "[*] Received: %s" % request
   #返还一个数据包
   client_socket.send("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() 

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

这便是我对第二章TCP和UDP网络编程的学习,如有错误还请指出,定及时改正。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值