PracticeDev/study_python/tcp_relay-master/auth.py.bak

81 lines
2.1 KiB
Python
Raw Permalink Normal View History

2022-12-20 17:31:11 +08:00
#!/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