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 を送信するとき、00 00 00 00 00 00 を送信する代わりに、16 進数でエンコードされた実際の \x (およびそれに続くすべての数値) を送信します。

通常は、次のように使用できます: "sendp(dst="\x00\x00\x00\x00\x00\x00",blablablabla)

この文字列操作またはエンコード中に何か間違ったことをしていると思います。

これに関する任意の入力が役立ちます!

ありがとう !

4

2 に答える 2

6

表記は\x文字列リテラル用です。代わりに、文字列を 16 進数としてデコードします。

>>> '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')

これは を削除し:、文字列を 16 進数であるかのようにデコードします

于 2012-07-09T19:45:12.430 に答える