실험에서는 별도의 HTTP 데이터 메시지를 직접 구성해야 하며 SOCK_STREAM을 사용하여 데이터 패킷을 보내려면 완전한 TCP 상호 작용이 필요합니다.
그래서 프로그래밍을 위해 원시 소켓을 사용하고 데이터 패킷을 직접 구성하여 IP 계층에서 보내려는 것, 즉 SOCK_RAW를 사용하여 데이터를 보내고 싶습니다.
SOCK_RAW를 사용하면 데이터 패킷을 완전히 수정할 수 있고, IP 계층의 모든 데이터 패킷을 처리할 수 있으며, UDP 및 TCP의 제한을 받지 않고 각 필드를 수정할 수 있다는 장점이 있습니다.
HTTP 데이터 패킷은 아래와 같이 구성됩니다.
IP 계층과 TCP 계층은 Python의 Impacket 라이브러리를 사용하며, http 콘텐츠가 자체적으로 채워집니다.
#!/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()