小编n00*_*bie的帖子

Python套接字接收 - 传入的数据包总是有不同的大小

我正在使用SocketServer模块作为TCP服务器.我在这里遇到了一些问题recv(),因为传入的数据包总是有不同的大小,所以如果我指定recv(1024)(我尝试使用更大的值,更小),它会在2或3个请求后被卡住,因为数据包长度将会更小(我认为),然后服务器卡住,直到超时.

class Test(SocketServer.BaseRequestHandler):

def handle(self):

   print "From:", self.client_address

   while True:    

     data = self.request.recv(1024)
     if not data: break

     if data[4] == "\x20":              
       self.request.sendall("hello")
     if data[4] == "\x21":
       self.request.sendall("bye")
     else:
       print "unknow packet"
   self.request.close()
   print "Disconnected", self.client_address

launch = SocketServer.ThreadingTCPServer(('', int(sys.argv[1])),Test)

launch.allow_reuse_address= True;

launch.serve_forever()
Run Code Online (Sandbox Code Playgroud)

如果客户端通过相同的源端口发送多个请求,但服务器卡住,任何帮助将非常感谢,谢谢!

python networking timeout recv

37
推荐指数
3
解决办法
11万
查看次数

校验和udp计算python

我想计算我想发送的UDP报头数据包的校验和:

packetosend = """60 00 00 00 00 24 3a 40 20 02 c0 a8 01 50 00 01 00 00 
00 00 00 00 09 38 20 02 c0 a8 01 50 00 01 00 00 00 00 00 00 09 6f"""
Run Code Online (Sandbox Code Playgroud)

所以我需要加入这个utf-16(不是问题)并计算这个特定数据包的校验和.我怎样才能做到这一点?

谢谢!

编辑:是的它是ICMPv6数据包的IPv6标头,无论如何我想知道的是公式,以及它是如何工作的.

我将给出一个ICMP ping echo(v4)数据包的另一个例子:

packet = """
08 00 d1 15 76 0c 00 07 bf d3 55 4a ad b5 03 00   // "d1 15" is the packet checksum 
08 09 0a …
Run Code Online (Sandbox Code Playgroud)

python networking checksum packet

4
推荐指数
2
解决办法
2万
查看次数

将十进制转换为十六进制python

我在python中构建服务器,我需要将十进制值转换为十六进制,如下所示:

假设数据包以4个字节开始,定义数据包长度:00 00 00 00如果len(数据包)= 255,我们将发送:00 00 00 ff

现在我的问题是有时数据包大于256,例如336,那么它将是:00 00 01 50

我不知道如何在python中做到这一点,我将非常感谢任何帮助.谢谢 !

python networking hex decimal

2
推荐指数
1
解决办法
5059
查看次数

从字符串中删除一个字符

我想从这样的字符串中删除一个字符:

string = "ASDFVGHFJHRSFDZFDJKUYTRDSEADFDHDS"

print len(string)
Run Code Online (Sandbox Code Playgroud)

(33)

所以我想在这个字符串中删除一个随机字符,然后有一个len = 32这是最好的方法吗?

编辑:谢谢你的答案,但我忘记了一些事情:我想打印删除的字符; 使用Anurag Uniyal技术?

谢谢 !

python string

0
推荐指数
2
解决办法
3448
查看次数

替换或删除一个null(python)

我想删除字符串中的一个空字节,有时用另一个字符替换它.像那样 :

string ="41 00 36 00 36 00 00 00 57 00 46 00 42 00 41 00 61 00 62 00 73 00 20 00 36 00"

我正在考虑使用随机和替换,但替换总是从第一个开始:

replace("00","B",1)
Run Code Online (Sandbox Code Playgroud)

所以这不是随机的.

任何帮助将不胜感激 !

编辑:我的意思是零到00,我犯了一个错误:

string ="41 00 36 00 36 00 00 00 57 00 46 00 42 00 41 00 61 00 62 00 73 00 20 00 36 00"

谢谢

python random replace

0
推荐指数
1
解决办法
2348
查看次数

标签 统计

python ×5

networking ×3

checksum ×1

decimal ×1

hex ×1

packet ×1

random ×1

recv ×1

replace ×1

string ×1

timeout ×1