我正在尝试将负整数转换为二进制补码十六进制,可以将其放入signal_strength变量中的小包(贝洛)的十六进制代码中。
负数来自以下代码行:
sigstren = int(-1*(20*math.log10(distance) + 20*math.log10(frequency) - 37.55))
示例数字为-54,其十六进制补码为FFCA,但我需要使用\ xca格式。
RadioTap(len=18, present='Flags+Rate+Channel+dBm_AntSignal+Antenna', notdecoded='\x00\x6c' + get_frequency(CHANNEL) + '\xc0\x00' + signal_strength + '\x01\x00\x00')
我已经尝试过了:
signal_string = struct.pack("<h", signal)
但是它返回\ xca \ xff,对于数据包来说太大了。
我也尝试过这个:
def int_to_hex_string(value, bits):
return "{0:0{1}X}".format(value & ((1<<bits) - 1), bits//4)
signalstrength = int_to_hex_string(sigstren, 8)
但是仅返回CA,由于ValueError我无法将\ x添加到其中:无效的\ x转义。 尝试添加\ x以获取数据包的正确格式时,我遇到了该错误:
signal_strength = '\x' + signalstrength
答案 0 :(得分:0)
这有帮助吗?
>>> hex(0x100 - 0x54)
'0xac'
您只需要翻转半个字节并将0
更改为\
答案 1 :(得分:0)
我确切地知道您在做什么,您正尝试将无线电信号手动填充到notdecoded
中,因为以前的Scapy版本中无法将其作为字段进行访问。
请注意,最新的scapy开发版本现在允许您直接访问这些字段。自己做比较复杂(您还需要考虑每个字段的填充...)
安装开发版本:zip of latest dev github version,然后解压缩并python setup.py install
(在Linux上为Sudo)
使用最新的RadioTap功能:
以下是您可以使用最新的scapy开发版设置的字段列表
['TSFT', “标志”, '率', '渠道', “ FHSS”, 'dBm_AntSignal', 'dBm_AntNoise', 'Lock_Quality', 'TX_Attenuation', 'dB_TX_Attenuation', 'dBm_TX_Power', '天线', 'dB_AntSignal', 'dB_AntNoise', “ RXFlags”, “ ChannelPlus”, “ MCS”, 'A_MPDU', 'VHT', “时间戳记”, “ RadiotapNS”, “ VendorNS”, 'Ext']
这是您应该做的
RadioTap(len=18, present='Flags+Rate+Channel+dBm_AntSignal+Antenna',
dBm_AntSignal=-54,
Antenna=0x1)
有效:
###[ RadioTap dummy ]###
version= 0
pad= 0
len= 18
present= Flags+Rate+Channel+dBm_AntSignal+Antenna
Flags=
Rate= 0
Channel= 0
ChannelFlags=
dBm_AntSignal= -54dBm
Antenna= 1
notdecoded= ''