(注:本文部分内容摘自互联网,由于作者水平有限,不足之处,还望留言指正。)

先写首诗,抒抒情。

一、

食堂、校园

见过你那么多次

卑微的我

只敢偷偷瞄上一眼

心扑通

扑通

春天真好

不是么

二、

学子、银桦

期待再一次见你

害羞的我

却敢四处张望

眼睛

一眨一眨

你在哪里

可否知道

三、

阴郁的早晨

一片混沌

相见

是为了什么

怀念

是自我麻痹

银杏路上

别来无恙

四、

天空

有你的影子

似一缕青烟

随风

慢慢

慢慢

慢慢

在我心中散去

(摘自河畔---最近在水河畔)

写的真好,不是吗?看到这首某大神的诗,我仿佛又回到了大学,那时候时光真好,不是吗?可惜我没有好好珍惜

开始正文吧

最近实验局的portal服务器挂了,又赶上国庆假期快要到了,修复估计无望。在这个背景下,超哥想让我用Python写一个portal服务器,不假思索,就被我拒绝了(这是没把我当人,把我当神了吧)。最后我俩讨价还价(就差打起来了),终于得到一个比较能接受的条件---做一个模拟portal服务器,只进行收发UDP包工作,瞬间我的心就暖了。

介绍一下基本过程吧。

一、正常的portal流程

上图中172.17.226.99是portal服务器地址,10.6.61.83是云AC 的地址。

流程:首先portal服务器向云AC发送REQ_CHALLENGE请求,云AC回复ACK;portal服务器收到后再次向云AC发送REQ_AUTH请求,云AC回复ACK。(主要过程就是上面四步,是不是很简单

二、Python模拟的portal服务器设计思路

1. 制作满足要求的REQ_CHALLENGE报文,通过UDP协议向云AC发送

2. 等待云AC的回包,设置1S的时延(timeout),确认收到回包后

3. 解析、判断回包的UDP报文是否满足ACK_CHALLENGE要求

4. 如果满足,通过收到回包的报文内容,构造特定的REQ_AUTH报文,向云AC发送

5. 等待回包,收到ACK_AUTH包后

6. 判断ACK_AUTH报文是否符合要求,如果符合,则结束

7. 因为单个循环大约需要0.5s,达不到一般portal服务器的压力,需要加入多线程并发。

三、共享部分核心代码

import socket
import binascii
import time
BUF_SIZE = 1024
server_addr = ('10.6.61.83',2000)     #云AC的地址
client = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)  #建立UDP
client.bind(('10.6.61.15',6985))     #绑定端口号,10.6.61.15为本机地址(模拟portal),和发送的端口号
client.settimeout(1)        #时延
def sendpacket(dd,ip):       #发送包
       client.sendto(dd,ip)
def acceptpacket():        #接受包try:data,addr = client.recvfrom(BUF_SIZE)cdata = binascii.b2a_hex(data)except socket.timeout:     #1s时延print("timeout")
for i in range(16,256):       #两个for循环,16进制1000到ffff的循环value =  hex(i)[2:]str1 = bytearray.fromhex(value)for j in range(16,256):value1 = hex(j)[2:]str2 = bytearray.fromhex(value1)str3 = str1 + str2da1 = b"\x01\x01\x00\x00"      #ASCII码,Python2中把前面的b去掉,要发送的报文能容ta1 = b"\x00\x00\n\x06=\x1f\x00\x00\x00\x00"da2 = b"\x01\x03\x00\x00"ta2 = b"\n\x06=\x1f\x00\x00\x00\x02\x01\x06wang\x04\x12\xea\xf6\xfb\xbf9\xacC\xbf\xfe\x81\xfbh0\x10\x15\xf6"data1 = da1 + str3 + ta1data2 = da2 + str3 + str3 + ta2sendpacket(data1,server_addr)time.sleep(0.5)acceptpacket()                  #这里需要加入判断回包内容是否符合,再进行下一步
#将两个for循环拉出来做成一个函数,引入threading模块,进行多线程并发

最后的代码大约有120行,以上是我写的第一个多次收发的请求的demo版,但是包含了主要的逻辑思路。具体的思路都已经注释了。

超哥要回家了,我也赶紧写完回家吧(免得让他等)。

再过几天国庆有空,我把我对Python的socket理解写下来,分享分享。就这样吧,撤了。

哎呀,漂亮的女同事也准备回家了。

姑娘留步,容老衲劫个色。

就这样吧,撤了。

转载于:https://www.cnblogs.com/yunguoxiaoqiao/p/7612527.html

Python的socket网络编程(一)相关推荐

  1. python 之socket 网络编程

    socket通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄,应用程序通常通过"套接字"向网络发出请求或者应答网络请求. socket起源于Un ...

  2. Python: Socket网络编程,多线程处理小Demo

    一个简单的例子,深入研究一下socket的多线程处理任务 Server端: #!/usr/bin/env python #encoding:utf8 # # 注意:定义encoding时必须在第二行i ...

  3. 五 Python之socket网络编程

    <1>socket概念 socket通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄,应用程序通常通过"套接字"向网络发出请求或者应 ...

  4. python资源库——socket网络编程

    sockket简介 socekt又称为'套接字',用于描述IP和地址端口,是一个通信链路的句柄,应用程序通常通过套接字向网络发出请求或者应答网络请求. socket起源于Unix,所以也遵从" ...

  5. python运维开发之socket网络编程01

    python运维开发之socket网络编程01说明:本文来自来自北京老男孩linux运维实战培训中心-运维开发课程免费视频内容,本文内容为系列内容,更多分享信息见:http://oldboy.blog ...

  6. Python面向对象进阶和socket网络编程

    写在前面 为什么坚持?想一想当初: 一.面向对象进阶 - 1.反射补充 - 通过字符串去操作一个对象的属性,称之为反射: - 示例1: class Chinese:def __init__(self, ...

  7. python编程入门与案例详解-Pythony运维入门之Socket网络编程详解

    Socket是什么? Socket 是电脑网络中进程间数据流的端点Socket 是操作系统的通信机制应用程序通过Socket进行网络数据的传输 首先,简单了解一下TCP通信过程: TCP三次握手(面试 ...

  8. python网络编程讲解_详解Python Socket网络编程

    Socket 是进程间通信的一种方式,它与其他进程间通信的一个主要不同是:它能实现不同主机间的进程间通信,我们网络上各种各样的服务大多都是基于 Socket 来完成通信的,例如我们每天浏览网页.QQ ...

  9. Python Socket网络编程(二)局域网内和局域网与广域网的持续通信

    目录 前言 IP地址 简介 公有IP 私有IP 局域网之间网络通信 前提 功能描述 源码 运行结果 局域网与广域网网络通信 前提 源码 结语 前言 本系列博客是笔者学习Python Socket的过程 ...

最新文章

  1. UIButton文字居左显示
  2. 【剑指offer-Java版】24二叉搜索树后序遍历序列
  3. Python获取昨天、今天、明天开始、结束时间戳
  4. 电脑账户头像怎么删掉_情侣头像丨情侣头像一男一女背影
  5. cython编码报错
  6. 线性支持向量机完全理解版
  7. 11. OD-Delphi程序暴力破解
  8. 没错,Java 人的下半场才刚开始!
  9. Stateflow中的事件执行顺序
  10. 在静态页面中使用Scss(windows)
  11. 8款功能强大的最新HTML5特效实例
  12. 网络编程----观察进程的启动与停止
  13. 罗技Lua脚本-CF神圣爆裂者自动开枪
  14. 结构梁配筋最牛插件_吃货的牛排种类大盘点,你最爱的是几分熟?
  15. 如何下载乌龟svn中文版
  16. linux下重启tomcat命令
  17. Spring实战(开发Web应用)
  18. 混淆电路(Garbled Circuit)
  19. 释放数字生产力 引领数字化转型新纪元——弘玑Cyclone 2022产品发布会圆满落幕
  20. 大白菜 U盘系统指南

热门文章

  1. 探讨下如何更好的使用缓存 —— 集中式缓存Redis的BitMap存储、管道与事务、以及与本地缓存一起构建多级缓存
  2. Fragment生命周期以及使用时的小问题
  3. 身体知道LGG酸奶调节肠道健康,开启功能型酸奶新时代
  4. 大数据平台搭建,cdh选型配置
  5. 仿iphone 气泡短信 自定义list适配器实现
  6. 从双非到应届大厂ssp offer ,再到万能博主,我是怎么做到的?
  7. 从PDO下的SQL注入思路到获得GIT 3000star项目0day
  8. 什么是接口测试?做接口测试的意义是什么?
  9. flutter:RenderFlex children have non-zero flex but incoming width constraints are unbounded.
  10. 银行NFC手机支付的开卡,卡片管理,个性化管理(学习中)