TCP and UDP clients with Python

Created On 26. Jan 2020

Updated: 2022-05-01 23:29:39.970344000 +0000

Created By: acidghost

Hacking with ready-to-go tools is cool, but just acting big with all predefined automation without knowing how things work won't bring us far.
In a vocabulary of every security elite, at least some knowledge of some scripting is required. Python is a kind offender for most newbies.
Below we are building a simple client that will try to connect to google and get a response.
Be aware this might look simple and sharp, but there is a lot wrong with how we are formulating it. It is fine, for our first go we don't need to complicate things.

import socket
target_host = www.google.com
target_port = 80
create a socket object
use socket.SOCK_DGRAM instead for UDP
client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
connect the client
client.connect((target_host,target_port))
send some data
use sendto() instead for UDP
client.send("GET / HTTP/1.1\r\nHost: google.com\r\n\r\n")
receive some data
response = client.recv(4096)
print response

Check below more on sockets which will be more heavily covering later.
A socket can be created by making a call to the class method socket() in the socket module. This will return a socket in the domain specified.
The parameters to the method are as follows.
Python supports three address families:
AF_INET: Used for IP version 4 or IPv4 Internet addressing.
AF_INET6: Used for IPv6 Internet addressing.
AF_UNIX: Used for UNIX domain sockets (UDS).
Socket type: Usually, socket type can be either SOCK_DGRAM for User Datagram Protocol (UDP) or SOCK_STREAM for Transmission Control Protocol (TCP). SOCK_RAW is used to create raw sockets.
Protocol: Generally left at the default value. Default value is 0.
The socket module has the following class methods:
socket.socket(family, type): Create and return a new socket object
socket.getfqdn(name): Convert a string IP address to a fully qualified domain name
socket.gethostbyname(hostname): Resolve a hostname to an IP address Instance methods require a socket instance returned from socket.
The socket module has the following instance methods:
sock.bind( (address, port) ): Bind the socket to the address and port
sock.accept(): Return a client socket with peer address information
sock.listen(backlog): Place the socket into the listening state
sock.connect( (address, port) ): Connect the socket to the defined host and port
sock.recv( bufferLength[, flags] ): Receive data from the socket, up to buflen (maximum bytes to receive)
sock.recvfrom( bufferLength[, flags] ): Receive data from the socket, up to buflen bytes, also returning the remote host and port from which the data came
sock.send( data[, flags] ): Send data through the socket
sock.sendall( data[, flags] ): Send data through the socket, and continues to send data until either all data has been sent or an error occurred
sock.close(): Close the socket
sock.getsockopt( lvl, optname ): Get the value for the specified socket option
sock.setsockopt( lvl, optname, val ): Set the value for the specified socket option
Remember this and you will become a python socket sorcerer in no time :shipit:

Section: Web

Back