【问题标题】:Python raw sockets not printing received data (but its being sent)Python原始套接字不打印接收到的数据(但它正在发送)
【发布时间】:2018-08-23 20:30:15
【问题描述】:

我正在向服务器发送两个请求,代码如下:

import sys
import socket

s = socket.socket ( socket.AF_INET, socket.SOCK_STREAM )
s.connect((sys.argv[1], 3232))
s.send('HELP\n')
print("1st\n" + s.recv(4096))
s.send('HELP\n')
print("2nd\n" + s.recv(4096))
s.close()

HELP 应该总是返回一些东西;例如,如果使用 netcat:

# nc 10.x.x.x 3232

HELP
* LIST OF VALID COMMANDS:
...

我在上面发布的代码不会总是输出HELP 响应。例如;它只会很少显示recv 输入;有时从不(下面,1st 甚至没有显示):

# python example.py 10.x.x.x
1st
Welcome to...

2nd
* LIST OF VALID COMMANDS:
...

我以为HELP没有被发送,所以我打开wireshark看到以下内容;所以它似乎正在正确发送:

HELP
* LIST OF VALID COMMANDS:
...

HELP
* LIST OF VALID COMMANDS:
...

有什么想法吗?我不确定我做错了什么。

【问题讨论】:

  • sys.argv[1]的值是多少?
  • 另外,这些是 not 原始套接字。这是 TCP/IP。

标签: python sockets raw-sockets


【解决方案1】:

经过一些试验,我设法修复了代码。服务器在连接后发回数据;因此,在初始连接时,您必须s.recv();我这样做了,应用程序的行为符合我的预期。

修改代码:

import sys
import socket

s = socket.socket ( socket.AF_INET, socket.SOCK_STREAM )
s.connect((sys.argv[1], 3232))
print("0th\n" + s.recv(4096))
s.sendall('HELP\n')
print("1st\n" + s.recv(4096))
s.sendall('HELP\n')
print("2nd\n" + s.recv(4096))
s.close()

这总是返回以下内容:

# python /tmp/test.py 10.x.x.x
0th
Welcome to...


1st
* LIST OF VALID COMMANDS:
...


2nd
* LIST OF VALID COMMANDS:
...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-09-14
    • 1970-01-01
    • 2011-03-15
    • 2023-03-17
    • 2010-11-05
    • 1970-01-01
    • 2013-06-18
    • 1970-01-01
    相关资源
    最近更新 更多