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