>  기사  >  백엔드 개발  >  Python 원시 소켓 프로그래밍

Python 원시 소켓 프로그래밍

高洛峰
高洛峰원래의
2016-10-18 10:01:461448검색

실험에서는 별도의 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()


성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.