Making magic with the network stack
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
import socket
# Sending a SYN packet
def init_socket(): s = socket.socket(socket.AF_INET, socket.SOCK_RAW, socket.IPPROTO_TCP) s.setsockopt(socket.IPPROTO_IP, socket.IP_HDRINCL, 1) return s
def send_raw_packet(): ip_header = b'\x45\x00\x00\x28' # Version, IHL, Type of Service | Total Length ip_header += b'\x00\x03\x00\x00' # Identification | Flags, Fragment Offset ip_header += b'\x28\x06\xa6\xec' # TTL = 40s, Protocol = 6 for TCP | Header Checksum ip_header += b'\xac\xa8\x05\x03' # Source Address: 172.168.5.3 ip_header += b'\xac\xa8\x05\x04' # Destination Address: 172.168.5.4
tcp_header = b'\x15\xb3\x1a\x0a' # Source Port | Destination Port tcp_header += b'\x00\x00\x00\x00' # Sequence Number tcp_header += b'\x00\x00\x00\x00' # Acknowledgement Number tcp_header += b'\x50\x02\x00\x00' # Data Offset, Reserved, Flags | Window Size tcp_header += b'\xe6\x32\x00\x00' # Checksum | Urgent Pointer
packet = ip_header + tcp_header return packet
if __name__=="__main__": dst_IP = '172.168.5.4'
s = init_socket()
packet = send_raw_packet() s.sendto(packet, (dst_IP, 0))
|