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