在實驗中需要自行建構單獨的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()