发送UDP数据包但不确定设备是否正在应答

时间:2018-02-22 18:30:25

标签: python python-sockets

我正在尝试在特定端口上广播特定号码,某些设备在看到该号码后会响应。设备将回复以下信息:

  

MAC = 00:12:34:56:78:9a
  IP = 10.17.253.98
  网络采集模式= DHCP
  支持的协议版本= 3
  供应商=遗产
  产品= USB
  固件= 1.8.5

这是我的开始。具体号码为“222456”,端口号为12345,广播子网为10.17.253

len(m)=2
len(m[0])=10
/ô¢
len(m[1])=2
('10.17.253.22', 6971)

看着wireshark,我看到“222456”正在通过12345端口广播。但是,我得到的回报是:

/ô¢

除了没有得到我应该得到的,返回的IP不是正确的IP。我也不知道SSLServerSocketFactory ssf = (SSLServerSocketFactory)SSLServerSocketFactory.getDefault(); TreeMap<String, Boolean> ciphers = new TreeMap<>(); for (String cipher : ssf.getSupportedCipherSuites()) ciphers.put(cipher, Boolean.FALSE); for (String cipher : ssf.getDefaultCipherSuites()) ciphers.put(cipher, Boolean.TRUE); System.out.println("Default Cipher"); for (Entry<String, Boolean> cipher : ciphers.entrySet()) System.out.printf(" %-5s%s%n", (cipher.getValue() ? '*' : ' '), cipher.getKey()); 的意思。

1 个答案:

答案 0 :(得分:0)

当您尝试使用套接字发送消息时,您需要使用pickle,json或简单解码进行对象序列化。如果你想发送一个str,我认为最好的方法是创建一个.decode,但是如果你需要发送一个以上的str,你可以将信息放在一个列表上并使用pickle或json来进行对象序列化,也许你可以更改此项并将对象序列化放在sendto上。

m=s.recvfrom(8192)

到这个

data, addr =s.recvfrom(1024)

我不记得为什么,但是把1024作为最有效的方法(我认为),并且在获取数据后反过来对象序列化,.encode如果你使用.decode和pickle .loads。如果您使用的是Python 2,我认为您可以使用cPickle来执行此操作。在Python 3中,cPickle不存在,但他的方法是在pickle lib。