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

先写首诗,抒抒情。

一、

食堂、校园

见过你那么多次

卑微的我

只敢偷偷瞄上一眼

心扑通

扑通

春天真好

不是么

二、

学子、银桦

期待再一次见你

害羞的我

却敢四处张望

眼睛

一眨一眨

你在哪里

可否知道

三、

阴郁的早晨

一片混沌

相见

是为了什么

怀念

是自我麻痹

银杏路上

别来无恙

四、

天空

有你的影子

似一缕青烟

随风

慢慢

慢慢

慢慢

在我心中散去

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

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

开始正文吧

最近实验局的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 + str2
da1 = 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 + ta1
data2 = da2 + str3 + str3 + ta2
sendpacket(data1,server_addr)
time.sleep(0.5)
acceptpacket() #这里需要加入判断回包内容是否符合,再进行下一步
#将两个for循环拉出来做成一个函数,引入threading模块,进行多线程并发

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

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

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

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

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

就这样吧,撤了。

Python的socket网络编程(一)的更多相关文章

  1. python之Socket网络编程

    什么是网络? 网络是由节点和连线构成,表示诸多对象及其相互联系.在数学上,网络是一种图,一般认为专指加权图.网络除了数学定义外,还有具体的物理含义,即网络是从某种相同类型的实际问题中抽象出来的模型.在 ...

  2. python 之socket 网络编程

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

  3. python:socket网络编程

    Socket 网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socket, 又称为“套接字”. 模块 import socket 创建套接字 socket.socket( ...

  4. 『Python』socket网络编程

    Python3网络编程 '''无论是str2bytes或者是bytes2str其编码方式都是utf-8 str( ,encoding='utf-8') bytes( ,encoding='utf-8' ...

  5. python的Socket网络编程

    计算机网络: 多台独立的计算机用网络通信设备连接起来的网络.实现资源共享和数据传递.比如,我们之前的学过的知识可以将D盘的一个文件传到C盘,但如果你想从你的电脑传一个文件到我的电脑上目前是做不到的; ...

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

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

  7. python之socket 网络编程

    提到网络通信不得不复习下osi七层模型: 七层模型,亦称OSI(Open System Interconnection)参考模型,是参考模型是国际标准化组织(ISO)制定的一个用于计算机或通信系统间互 ...

  8. python的Socket网络编程 使用模板

    本文给出的是TCP协议的Socket编程. 其中用了一个dbmanager数据库操作模块,这个模块是我自己定义的,可以在我的另一个文章中找到这个模块的分享.python操作mysql数据库的精美实用模 ...

  9. python的socket网络编程(二)

    (注:本文部分内容摘自互联网,由于作者水平有限,不足之处,还望留言指正.) 国庆八天假,已过去3天了,加上明天又是中秋,还是决定在今晚把之前想写的东西写完.国庆节在宁波老家,吃好喝好睡好,就是没有好好 ...

随机推荐

  1. 【javaScript基础】马上调用函数表达式

    在javaScript中,每一个函数被调用时,都会创建一个新的运行上下文.由于在一个函数里面定义的变量和函数仅仅能在里面訪问.在外面是不行的.上下文提供了一种非常easy的方法来创建私有性. //ma ...

  2. springboot整合mybatis之用外置服务器启动项目(二)

    在上一篇中我们是用的springboot自带的tomcat服务器,接下来想试一下 将springboot当做一个web项目 放在eclipse中用tomcat来启动. 首先在pom.xml中加上,移除 ...

  3. Android 蓝牙学习

    Android 蓝牙学习 学习缘由 上个礼拜公司要开发个简单的五子棋游戏!其中一个需求就是支持蓝牙对战!所以苦逼的我学习蓝牙方面的知识了! 简介 Bluetooth是目前使用最广泛的无线通讯协议,近距 ...

  4. GIF动画录制工具(写教程时用的比较小巧的gif工具)

    1  软件小巧实用,只有1m 2  gif效果还可以 3  绿色,无需安装 很多地方能下载,百度就行. 下载地址: http://www.downxia.com/downinfo/41427.html

  5. 170322、Spring Boot 性能优化之将Servlet容器变成Undertow

    需求缘起:在研究Spring Boot加速启动的时候,发现我们在实际中,可能比较注重我们服务器的内存的情况,那么我们会想如果在启动的时候,所占用的内存越低是越好,基于这个想法,我们看看Spring B ...

  6. BitCoin Trading Strategies BackTest With PyAlgoTrade

    Written by Khang Nguyen Vo, khangvo88@gmail.com, for the RobustTechHouse blog. Khang is a graduate f ...

  7. 用于金融分析的Python包

    1. NumPy:实现各种数组对象函数和傅立叶变换等等科学计算模块.2. SciPy:提供更多科学计算功能,包括矩阵,求解线性方程组,积分运算,优化等.3. matplotlib:一个跨平台的数值绘图 ...

  8. Shiro框架简介

    Apache Shiro是Java的一个安全框架.对比另一个安全框架Spring Sercurity,它更简单和灵活. Shiro可以帮助我们完成:认证.授权.加密.会话管理.Web集成.缓存等. A ...

  9. 360UI 界面框架 即QUI框架与EXT比较

    EXTJS框架是非常全面和成熟的,这是因为它发展的年头久远,并且有全世界的EXTJS爱好者为其出谋献策,它的组件库尤其是DataGrid组件无人能出其右.我在最初也考虑过使用EXTJS来做项目,学习了 ...

  10. 009-Hadoop Hive sql语法详解4-DQL 操作:数据查询SQL-select、join、union、udtf

    一.基本的Select 操作 语法SELECT [ALL | DISTINCT] select_expr, select_expr, ...FROM table_reference[WHERE whe ...