在Python中将以太网数据与ARP协议一起发送到汽车网关



我已经用python编程了,其中将发送字节数组以激活汽车网关中的协议功能。基本上,我正在构建一个较低级别的ISO-OSI结构,该结构与ARP协议结构一起发送以太网层数据包。我已经通过以太网 LAN 电缆将树莓派 2 连接到网关。我正在使用树莓中的API来运行代码。我正在使用python 3进行编译。

#start of program
from socket import *
 def sendeth(ethernet_packet,payload,interface = "eth0"):
    """Sending RAW Ethernet packets with ARP protocol."""
    s= socket(AF_PACKET, SOCK_RAW)
    s.bind((interface,0))
    return s.send(ethernet_packet + payload)
def pack(byte_sequence):
    """convert list of bytes to byte string"""
    return b"".join(map(chr, byte_sequence))

if __name__ == "__main__":
#desadd,srcadd,ethtype    
       ethernet_packet= [0x00, 0x36, 0xf8, 0x00, 0x5b, 0xed, 0xb8, 0x27,   0xcb, 0x8c, 0x1c, 0xf9, 0x08, 0x06]  
#arpprotocol
       arp_packet = [0x00, 0x01, 0x08, 0x00, 0x06, 0x04, 0x00, 0x01, 0xf0, 0x1f, 0xaf, 0x57, 0x33, 0xb1, 0xa9, 0xfe, 0x00, 0x14, 0x00, 0x36, 0xf8, 0x00, 0x5b, 0xed, 0xa9, 0xfe, 0x3f, 0x29] 
   payload = "".join(map(chr, arp_packet))
r = sendeth(pack(ethernet_packet),
            pack(arp_packet))
printf("sent Etherent with ARP_Paket payload length is %d bytes" % r)

当我在树莓派中运行程序时

$sudo python3 APR.py    

它抛出一个错误,

Traceback (most recent call test):  
File"APR.py", line 24,in <module>  
r = sendeth(pack(ethernet_packet),  
File"APR.py", line 13,in pack  
return b"".join(map(chr, byte_sequence))  
TypeError: sequence intem 0: expected Bytes, bytearray, or an object with   the buffer Interface, str found.

我已经在谷歌和维基百科中尽力了这个合理的错误,但找不到任何错误。我只有一个月大的Python。因此,有关此问题的任何线索或帮助都将是有帮助且方便的。

可能的解决方案

由于我使用的是python 3,因此会引发错误。就像在Python 2中一样,它的完美很好。可能在 python 3 中,我无法将十六进制作为字符串发送!!如果这是问题,有人可以帮助我如何克服错误。

你的 pack() 函数不起作用,因为 chr 函数返回str但不返回字节字符串。请参阅 chr() 等效返回字节对象,在 py3k 中了解可能的解决方案。

在您的情况下,最简单的解决方案是直接使用 bytearray

r = sendeth(bytearray(ethernet_packet),
        bytearrayarp_packet))

相关内容

  • 没有找到相关文章

最新更新