81 lines
2.1 KiB
Python
Executable File
81 lines
2.1 KiB
Python
Executable File
#!/usr/bin/python
|
|
|
|
import socket
|
|
import struct
|
|
import threading
|
|
import time
|
|
import sys
|
|
import random
|
|
import re
|
|
import logging
|
|
from optparse import OptionParser
|
|
from scapy.all import *
|
|
|
|
def calculate_tcp_length(pkt):
|
|
iphdr_len = pkt[IP].ihl * 4
|
|
total_len = pkt[IP].len
|
|
tcp_hdrlen = pkt[TCP].dataofs * 4
|
|
tcp_payload_len = total_len - iphdr_len - tcp_hdrlen
|
|
return tcp_payload_len
|
|
|
|
def recalculate_tcp_md5_signature(pkt,password):
|
|
|
|
destination_ip = pkt[IP].dst
|
|
source_ip = pkt[IP].src
|
|
reserved = 0
|
|
protocol = socket.IPPROTO_TCP
|
|
|
|
tcp_hdrlen = pkt[TCP].dataofs *4
|
|
tcp_payload_len =calculate_tcp_length(pkt)
|
|
total_length = tcp_hdrlen + tcp_payload_len
|
|
|
|
#pseudo header
|
|
psh = struct.pack("!4s4sBBH",
|
|
source_ip,
|
|
destination_ip,
|
|
reserved,
|
|
protocol,
|
|
total_length
|
|
)
|
|
|
|
iphdr_len = pkt[IP].ihl * 4
|
|
tcp_header = pkt[iphdr_len:iphdr_len+20]
|
|
tcp_payload = pkt[iphdr_len+20:]
|
|
|
|
tcp_sport = pkt[TCP].sport
|
|
tcp_dport = pkt[TCP].dport
|
|
tcp_seq = pkt[TCP].seq
|
|
tcp_ack = pkt[TCP].ack
|
|
tcp_dataofs = pkt[TCP].dataofs
|
|
tcp_reserved = pkt[TCP].reserved
|
|
tcp_flags = pkt[TCP].flags
|
|
tcp_window = pkt[TCP].window
|
|
tcp_chksum = pkt[TCP].chksum
|
|
tcp_urgptr = pkt[TCP].urgptr
|
|
|
|
|
|
|
|
reassemble_pkt[TCP].seq = seq
|
|
reassemble_pkt[TCP].ack = ack
|
|
reassemble_pkt[TCP].sport = sport
|
|
reassemble_pkt[TCP].dport = dport
|
|
|
|
if tsecr!=None and tsval!=None:
|
|
if reassemble_pkt[TCP].options != None:
|
|
#logging.info("tcp options:",reassemble_pkt[TCP].options)
|
|
listopt = []
|
|
for opt in reassemble_pkt[TCP].options:
|
|
if opt[0] != 'Timestamp':
|
|
listopt.append(opt)
|
|
else:
|
|
|
|
timestamp = ('Timestamp',(tsval,tsecr))
|
|
|
|
listopt.append(timestamp)
|
|
|
|
reassemble_pkt[TCP].options = listopt
|
|
#logging.info("11111tcp options:",reassemble_pkt[TCP].options)
|
|
|
|
del reassemble_pkt[TCP].chksum
|
|
del reassemble_pkt[IP].chksum
|