1

对于你们大多数人来说,这可能是一个愚蠢的问题,但我正面临这个问题;

我正在使用 scapy 在网络上捕获一个 mac 地址,我通过这种方式将此 mac 地址转换为“\x00\x21\x23\x24\x25”:

...
  b = p.sprintf("%Dot11.addr2%")
  print "Sending to this MAC Address",b
  #Here, the mac address looks like 00:00:00:00:00:00
  dstmac = str('\\x'+b.replace(':','\\x'))
  #Now, the mac address looks like this:
  "\x00\x00\x00\x00\x00\x00"
  sendp(dst=dstmac,blablablabla)
...

当此脚本通过网络发送 mac 时,它会发送以十六进制编码的实际 \x(以及所有后续数字),而不是发送 00 00 00 00 00 00。

通常,您可以这样使用它,这很好:"sendp(dst="\x00\x00\x00\x00\x00\x00",blablablabla)

我认为我在进行此字符串操作或编码时做错了。

对此的任何输入都会有所帮助!

谢谢 !

4

2 回答 2

6

\x符号用于字符串文字。将字符串解码为十六进制。

>>> '123456789abc'.decode('hex')
'\x124Vx\x9a\xbc'
于 2012-07-09T19:31:15.950 回答
1

当你这样做时,replace(':','\\x')你并没有做你认为你正在做的事情。您将替换为不将数字转换为二进制值:的字符。 如果你做了一个你会得到\x
printdstmac'\\x00\\x00\\x00\\x00\\x00\\x00'

您可以通过执行以下操作来获得您正在寻找的效果

如另一个答案中所述,以获得您正在寻找的东西,您应该

dstmac = b.replace(':','').decode('hex')

这是删除:和解码字符串,就好像它是十六进制

于 2012-07-09T19:45:12.430 回答