如何解决Python原始套接字更改符号
我有2个程序通过以太网相互通信。发送一个是使用scapy对端口,ip和有效负载进行编码,然后再将其作为以太网帧发送。我的问题是,在有效载荷中,我正在发送计数器,并且在接收到它有时会更改为符号时。
\x00\x00\x00\x00\x00\x00\x00\x07
\x00\x00\x00\x00\x00\x00\x00\x08 is fine but next
\x00\x00\x00\x00\x00\x00\x00\t
\x00\x00\x00\x00\x00\x00\x00\n
\x00\x00\x00\x00\x00\x00\x00\x0b its fine again
后来将其更改为下一个asci符号
我的问题是如何停止将字节转换为asci?
sender.py
import socket
from scapy.all import *
PADDING_VALUE = b'\xd1'
ETH_P_ALL = 3
DST_IP = "127.0.0.12"
IFACE = "lo"
SRC_IP = "127.0.0.11"
class FpgaMockup:
def __init__(self,setup_iface):
self.setup_sock = socket.socket(socket.AF_PACKET,socket.SOCK_RAW,socket.htons(ETH_P_ALL))
self.setup_sock.bind((setup_iface,0))
self.padding = 16
def send(self,pkt):
self.setup_sock.send(pkt)
if __name__ == "__main__":
testing_fpga = FpgaMockup(IFACE)
for i in range(100):
packet = IP(dst=DST_IP,src=SRC_IP)/UDP(sport=12666,dport=12666)/Raw(load=int(i).to_bytes(8,"big")+PADDING_VALUE*testing_fpga.padding)
pkt = Ether(packet)
testing_fpga.send(raw(pkt))
print("Finished sending.")
reciever.py
import socket
ETH_P_ALL = 3
s = socket.socket(socket.AF_PACKET,socket.htons(ETH_P_ALL))
s.bind(("lo",0))
while(True):
pkt = s.recv(4096)
print(pkt)
解决方法
这些未“更改”。 \x09
与\t
完全相同,\x0a
与\n
相同。这些只是以不同的方式打印,但是仍然相同:
>>> print(b'\x08\x09\x0a\x0b')
b'\x08\t\n\x0b'
>>> b'\x08\x09\x0a\x0b' == b'\x08\t\n\x0b'
True
有关更多信息,请参见String and Bytes literals语法的文档。
如果您不想进行此对话,只需强制以十六进制序列而不是字符来书写:
>>> b'\x08\t\n\x0b'.hex()
'08090a0b'
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。