Я работаю с контроллером прожектора SDN и python розетками. Мне нужно 2 бита в поле заголовка заголовка tcp или ip, которое я могу использовать, поле заголовка, которое я могу изменить и установить по своему усмотрению.
Я хочу отправлять пакеты с настраиваемым полем (2 бита или более ) в заголовке tcp или ip. Я использовал приведенный ниже скрипт для создания заголовка TCP, но не смог найти места для установки битов для своих целей.
Одно из возможных решений, которое я нашел, состояло в том, что в заголовке tcp зарезервировано 6 битов, но я не могу установить зарезервированные биты.
Любое обсуждение или ответ помогут. Спасибо
Кредиты Сураджу Сингху за код: http://www.bitforestinfo.com/2017/12/code-to-create-tcp-packet-header-with-python-socket-module.html
def create_tcp_feilds(self):
# ---- [ Source Port ]
self.tcp_src = self.sport
# ---- [ Destination Port ]
self.tcp_dst = self.dport
# ---- [ TCP Sequence Number]
self.tcp_seq = 0
# ---- [ TCP Acknowledgement Number]
self.tcp_ack_seq = 0
# ---- [ Header Length ]
self.tcp_hdr_len = 80
# ---- [ TCP Flags ]
tcp_flags_rsv = (0 << 9) # <<< cant set this field
tcp_flags_noc = (0 << 8)
tcp_flags_cwr = (0 << 7)
tcp_flags_ecn = (0 << 6)
tcp_flags_urg = (0 << 5)
tcp_flags_ack = (0 << 4)
tcp_flags_psh = (0 << 3)
tcp_flags_rst = (0 << 2)
tcp_flags_syn = (1 << 1)
tcp_flags_fin = (0)
self.tcp_flags_rsv=1
self.tcp_flags = tcp_flags_rsv + tcp_flags_noc + tcp_flags_cwr + \
tcp_flags_ecn + tcp_flags_urg + tcp_flags_ack + \
tcp_flags_psh + tcp_flags_rst + tcp_flags_syn + tcp_flags_fin
self.tcp_flags = 255
print(self.tcp_flags)
print(bin(self.tcp_flags))
print(tcp_flags_rsv)
# ---- [ TCP Window Size ]
self.tcp_wdw = socket.htons (5840)
# ---- [ TCP CheckSum ]
self.tcp_chksum = 0
# ---- [ TCP Urgent Pointer ]
self.tcp_urg_ptr = 0
return