IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> Python黑枣子 -> 正文阅读

[网络协议]Python黑枣子

我最近在看《Python黑帽子》由于这本书的已经是七八年前,所以书里的程序,用Python 3.x编译,够呛能运行

所以还是建议把Path改成Python2.7的,我用的Wing pro 8IDE。

改成默认的2.7,就可以运行书里的程序了。

快速创建TCP和UDP服务器及客户端,使用原始套接字

TCP客户端

因为TCP套接字是面向连接的,因此又称为基于流(stream)的套接字。TCP是Transmission Control Protocol(传输控制协议)的简写,意为“对数据传输过程的控制”。

简单的TCP客户端

#python2.7.18
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:baidu.com\r\n\r\n")
#接收一些数据,4096是缓冲区大小
response=client.recv(4096)
print response

先记住吧。。。我也没学过网络编程

socket.socket([family[, type[, proto]]])
  • family: 套接字家族可以使 AF_UNIX 或者 AF_INET。
  • type: 套接字类型可以根据是面向连接的还是非连接分为?SOCK_STREAM?(TCP)或?SOCK_DGRAM(UDP)
  • protocol: 一般不填默认为 0。

我认为这个TCP客户端的意思,就是能够主动申请与TCP服务器建立连接。。。maybe

这个socket对象的两个参数,第一个AF_INET是使用标准的ipv4地址或主机名(AF_INET6使用的ipv6地址或主机名)。第二个SOCK_STREAM,这是面向连接的,也就是说这是一个TCP客户端。

UDP客户端

import socket

target_host = "127.0.0.1"
target_port=80

client = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
#将数据发送到想发送到的服务器上
client.sendto("AAAAAAA",(target_host,target_port))
#接收到回传的数据,以及远程主机的信息和端口号
data,addr=client.recvfrom(4096)
print data;

执行之前,我们要开启80端口的监听模式

?nc -uvlp(u:udp,v:显示运行过程,l:使用监听模式,监管传入资料,p:设置通信端口)

?nc收到了。但是nc没有给我们返回消息

TCP服务器

我们需要将自己的TCP服务端绑定到命令行shell或者创建一个代理(这两个需求以后完成)。首先我们创建一个标准的多线程TCP服务器。

#-*- coding:utf8 -*-
import  socket
import threading

bind_ip = "0.0.0.0"     #绑定ip:这里代表任何ip地址
bind_port = 8888
#仅仅用于监听和接受客户端的连接请求的套接字
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
#确定服务器需要监听的IP地址和端口
server.bind((bind_ip, bind_port))
# 最大连接数为5
server.listen(5)

print "[*] Listening 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是客户端传到服务端的套接字,不同于sever套接字,服务器与此客户端通信是通过这个新的套接字上发送和接收数据来完成的。addr是一个元组,("地址",端口号)
    client,addr = server.accept()

    print "[*] Accepted connection from: %s:%d" % (addr[0], addr[1])

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

Python中网络编程对socket accept函数的理解 - 小女子的测试之路 - 博客园 (cnblogs.com)

Python 多线程 | 菜鸟教程 (runoob.com)

?client_handler = threading.Thread(target=handle_client, args=(client,))

这行代码的意思是,?创建线程,并调用handle_client函数,参数来自args=(),就是client。同时需要注意的是,args= 后面必须是一个元组,所以才会出现(client,)这个样子。

线程.start()就是开启线程

有关threading.Thread()的定义

def __init__(self, group=None, target=None, name=None,
? ? ? ? ? ? ? ? ?args=(), kwargs=None, verbose=None):

? ? ? ? """This constructor should always be called with keyword arguments. Arguments are:

? ? ? ? *group* should be None; reserved for future extension when a ThreadGroup
? ? ? ? class is implemented.

? ? ? ? *target* is the callable object to be invoked by the run()
? ? ? ? method. Defaults to None, meaning nothing is called.

? ? ? ? *name* is the thread name. By default, a unique name is constructed of
? ? ? ? the form "Thread-N" where N is a small decimal number.

? ? ? ? *args* is the argument tuple for the target invocation. Defaults to ().

? ? ? ? *kwargs* is a dictionary of keyword arguments for the target
? ? ? ? invocation. Defaults to {}.

? ? ? ? If a subclass overrides the constructor, it must make sure to invoke
? ? ? ? the base class constructor (Thread.__init__()) before doing anything
? ? ? ? else to the thread.

"""

  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2022-02-16 13:30:42  更:2022-02-16 13:30:48 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 9:33:27-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码