def send_ack(sp,acknum): logger.debug("SEND_ACK") pkt = IP(version=4L,ihl=5L,tos=0x0,len=52,id=sp[IP].id,flags="DF", frag=0L,ttl=sp[IP].ttl, proto="tcp",src=sp[IP].src,dst=sp[IP].dst,options=[]) /\ TCP(sport=sp[TCP].sport,dport=sp[TCP].dport,seq=sp[TCP].seq,ack=acknum,dataofs=8L, reserved=0L,flags="A",window=0,urgptr=0,options=[('NOP', None), ('NOP', None), sp[TCP].options[2]]) del sp[TCP].chksum del sp[IP].chksum # this will re-generate the checksums for IP/TCP pkt = pkt.__class__(str(pkt)) # FIXME sendp(Ether(dst="00:00:00:00:00:01")/pkt[IP], iface="eth1",verbose=0) logger.debug("sent ACK: %s" % acknum)
srcPort = 1200 seq = 900001 ack = 0 ttl = 64 flagsIP = "DF" id = 32711 chksum = 0 # để 0 rồi del đi để scapy tự tính # TCP flagsTCP = "S" # msg ="0123456789" pak = IP(dst=dst, src = src, ttl=ttl, flags=flagsIP,len=40, chksum = 0)/TCP(flags=flagsTCP, sport=srcPort, dport=int(dstPort), chksum = 0, seq=seq, ack=ack, window=65535) del pak[IP].chksum del pak[TCP].chksum print("Packet 1 SYN: " + src + " --> " + dst) # pak[TCP].flags |= 0x10 # set the ACK flag pak = pak.__class__(bytes(pak)) # Tự động tính chksum | show2() chỉ tính và in ra, không lưu lại vào packet pak = pak pak.show() # "VMware Network Adapter VMnet8" iface = "Ethernet" scapy.send(pak, iface=iface) filterd = "tcp && port " + str(dstPort) syn_ack = scapy.sniff(filter=filterd, count=1, iface=iface)[0] # ACK reply in handshake ack = IP(dst=dst, src = src, ttl=ttl, flags=flagsIP,len=40, chksum = 0)/TCP(flags="A", sport=srcPort, dport=dstPort, chksum = 0, seq=syn_ack.ack, ack=syn_ack.seq + 1, window=65535) del ack[IP].chksum del ack[TCP].chksum print("Packet 1 ACK: " + src + " --> " + dst) ack = ack.__class__(bytes(ack)) # Tự động tính chksum | show2() chỉ tính và in ra, không lưu lại vào packet