Im Experiment müssen Sie selbst eine separate HTTP-Datennachricht erstellen. Die Verwendung von SOCK_STREAM zum Senden von Datenpaketen erfordert eine vollständige TCP-Interaktion.
Also möchte ich Raw-Sockets zum Programmieren verwenden, Datenpakete direkt erstellen und sie auf der IP-Ebene senden, also SOCK_RAW zum Senden von Daten verwenden.
Der Vorteil der Verwendung von SOCK_RAW besteht darin, dass das Datenpaket vollständig geändert werden kann, alle Datenpakete auf der IP-Ebene verarbeitet werden können und jedes Feld geändert werden kann, ohne durch UDP und TCP eingeschränkt zu werden.
Das HTTP-Datenpaket wird unten erstellt
Die IP-Schicht und die TCP-Schicht verwenden die Impacket-Bibliothek von Python, und der http-Inhalt wird selbst ausgefüllt.
#!/usr/bin/env python #------------------------------------------------------------------------------- # Name: raw_http.py # Purpose: construct a raw http get packet # # Licence: PythonTab.com #------------------------------------------------------------------------------- import sys import socket from impacket import ImpactDecoder, ImpactPacket def main(): if len(sys.argv) = 1: # Calculate its checksum. seq_id = seq_id + 1 tcp.set_th_seq(seq_id) tcp.calculate_checksum() # Send it to the target host. s.sendto(ip.get_packet(), (dst,80)) cnt= cnt -1 if __name__ == '__main__': main()