亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何通過 Scapy 設置 TCP 選項(時間戳和 SAckOk)?

如何通過 Scapy 設置 TCP 選項(時間戳和 SAckOk)?

喵喵時光機 2022-06-14 17:04:02
對于我想通過 Scapy 生成的每個數據包,我都有以下信息,它是 tcpdump 輸出:1509472682.813373 MAC1 > MAC2, ethertype IPv4 (0x0800), length 74: (tos 0x0, ttl 64, id 64271, offset 0, flags [DF], proto TCP (6), length 60)    IP1.port1 > IP2.port2: Flags [S], cksum 0x4a0b (incorrect -> 0xe5b4), seq 1763588570, win 65535, options [mss 1460,sackOK,TS val 1098453 ecr 0,nop,wscale 6], length 0我已經生成TCP了如下數據包,但是當我通過wireshark檢查它們時,似乎Timestamp根本沒有設置該選項,Sack也沒有像我預期的那樣設置。for r in (("mss","MSS"), ("sackOK","SAck"), ("nop","NOP"), ("TS ", "Timestamps "), ("val", "TSval"), ("ecr", "TSecr"), ("wscale","WScale")):    opt = opt.replace(*r)opt=opt.split(",") for op in opt:           op = op.split()    if len(op) == 2:        options.append((op[0],int(op[1])))    elif op[0] == "Timestamps": ## Need some modification, so that Scapy do not ignore it.        options.append((op[0],(int(op[2]),int(op[4]))))    elif op[0] == "SAck": ## How to set SAck option to be SAck Permitted?        options.append((op[0], ''))     else: # NOP        options.append((op[0], ()))ip = ether/IP(src=ipsrc, dst=ipdst, len=ipLen, tos=frameTos, ttl=frameTtl, offset=frameOffset, id=frameId, flags=frameFlags, proto=protocol.lower())if ack_n is None:    pkt = ip / TCP(sport=srcport, dport=dstport , flags=frameFlag, seq=int(seq_n), chksum=cksum, window=win, options=options) / secrets.token_bytes(frameLen-54)                  else:                            pkt = ip / TCP(sport=srcport, dport=dstport , flags=frameFlag, seq=int(seq_n), ack=ack_n, chksum=cksum, window=win, options=options) / secrets.token_bytes(frameLen-54)                  pkt.time = frametimewrpcap(output, pkt, append=True)這是傳遞給我在開頭提供其信息的數據包的選項字段的內容:[('MSS', 1460), ('SAck', ''), ('Timestamps', (1098453, 0)), ('NOP', ()), ('WScale', 6)]但是當我通過 Wireshark 檢查數據包時,該Timestamps選項未設置,似乎 Scapy 已忽略它,并且該SAck選項未按我的預期設置。下面是這個數據包選項字段在 Wireshark 中的樣子:這是我所期望的:所以這里的問題是:如何設置timestamps,讓 Scapy 不忽略它?如何設置SAck,使其標記為允許。編輯1:我已經解決了這個問題SAck,我應該把它作為('SAckOK', '')
查看完整描述

1 回答

?
絕地無雙

TA貢獻1946條經驗 獲得超4個贊

最后我找到了我設置錯誤的地方:

正如我在第一次編輯中提到的那樣,要設置允許選擇性確認,我應該將選項元組傳遞為('SAckOK', '').

要設置timestamp我應該傳遞一個元組選項,因為('Timestamp', (1098453, 0))在內部元組中,第一個參數是Val,第二個參數是Ecr


查看完整回答
反對 回復 2022-06-14
  • 1 回答
  • 0 關注
  • 290 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號