Network Programming With Python Cheat Sheet 1
Network Programming With Python Cheat Sheet 1
Required common installation modules: PIP and IDLE Network forensics: Required python libraries and scripts Socket Types
PIP (Python Package Installer) System and network monitoring, security, and performance For TCP protocols • Reliable transmission • Packet sequence •
$ sudo apt-get install python-pip EDDIE Tool SOCK_STREAM
analysis agent for python Connection-oriented • Bidirectional
IDLE (Integrated Development pypcap Small packet capture tool based on python and pcap For UDP protocols • Unreliable transmission • No sequence of packets •
and Learning Environment)
$ sudo apt-get install idle SOCK_DGRAM
Implementation of the SSHv2 protocol, providing both Connectionless(UDP) • Not Bidirectional
Paramiko
client and server functionality
Create a socket
Top Python Network Programming Libraries pip Package installer for python
import socket # Imports the socket method
Django High-level Python Web framework for rapid development and pragmatic The Python Package Index (PyPI) Repository of software for the Python
Network Automation and Programmability Abstraction Layer with Python 3.8.0 ['False', 'None', 'True', 'and', 'as', 'assert', 'async', 'await', Client socket method connect()
NAPALM
Multivendor support - For dealing with dvice vendors 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'finally', 'for', 'from', Server socket method bind() • listen(backlog) • accept()
A coroutine -based Python networking library that uses greenlet to provide a 'global', 'if', 'import', 'in', 'is', 'lambda', 'nonlocal', 'not', 'or', 'pass', 'raise', s.recv() # Receive TCP packets
gevent TCP socket methods
high-level synchronous API on top of the libev or libuv event loop 'return', 'try', 'while', 'with', 'yield'] s.send() #Send TCP packets
Celery Asynchronous task queue/job queue based on distributed message passing s.recvfrom() # Receives UDP packets
UDP socket methods
dnspython library s.sendto() # Transmits UDP packets
Data Types Math Operators Installation More Socket Methods
Text str - x = "Hello World" ** Exponent 4 ** 2 = 16
$ pip install dnspython close() Close the socket connection
Numeric int, float, complex % Modulus/Remainder 43 % 5 = 3
Sequence list, tuple, range // Integer division 11 // 5 = 2
Basic DNS query gethostname() Returns a string which includes the hostname of the current PC
import dns.resolver Returns a string which includes the hostname and IP address of
Mapping dict / Division 11 / 5 = 2.2 gethostbyname()
name = 'google.com' the current PC
Set set, frozenset * Multiplication 3 * 3 = 9
for qtype in 'A', 'AAAA', 'MX', 'NS', 'TXT', 'SOA': listen() Setup and start TCP listener
Boolean bool - Subtraction 8 - 3 = 5
answer = dns.resolver.query(name,qtype, raise_on_no_answer=False) bind() Attach (host-name, port number) to the socket
bytes, bytearray, + Addition 2 + 2 = 4
Binary if answer.rrset is not None:
memoryview == Equal to accept() TCP client connection wait
print(answer.rrset)
!= Not equal to connect() Initiate TCP server connection
Socket Module (Berkley < Less than
Get MX target and name preference
TCP Socket Methods
API interface) > Greater Than import dns.resolver
mysocket.accept() Returns a tuple with the remote address that has connected
socket() • ind() • listen() • <= Less than or Equal to
Primary answers = dns.resolver.query('dnspython.org', 'MX') mysocket.bind( address ) Attach the specified local address to the socket
accept() • connect() • >= Greater than or Equal to
Functions an for rdata in answers:
connect_ex() • send() • recv() Can be used at the beginning of a line, or mysocket.connect( address ) Data sent through the socket assigns to the given remote address
Methods # print ('Host', rdata.exchange, 'has preference', rdata.preference)
• close() from within a line to the end of the line
mysocket.getpeername() Returns the remote address where the socket is connected
Server-side socket example mysocket.getsockname() Returns the address of the socket’s own local endpoint
Server-side socket example
mysocket.sendto(data,
import socket Force a data packet to a specific remote address
address)
import socket HOST = '' # Symbolic name meaning all available interfaces Socket Blocking
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM) PORT = 52542 # Arbitrary non-privileged port setblocking(1) Setup block
host=socket.gethostname() s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
setblocking(0) Remove / un-setup block
port=1111 s.bind((HOST, PORT))
myserver.bind((host,port)) # replace myserver and myclient with s.listen(1) Get port number using domain name
respective IPs conn, addr = s.accept() import socket
myserver.listen(5) print ('Connected by', addr)
while True: while 1:
socket.getservbyname('domain name')
myclient,addr=myserver.accept() data = conn.recv(1024)
print("Connected to {str(addr)}") if not data: break Check support for IPV6
myclient.send(msg.encode("ascii")) conn.sendall(data) import socket
myclient.close() conn.close() socket.has_ipv6 # Answer is TRUE or FALSE
getaddrinfo() - Bind Server to a Port
Socket Errors / Exceptions Network Analysis with Python
from socket import getaddrinfo
Use NMAP with port getaddrinfo(None, 'FTP', 0, socket.SOCK_STREAM, 0, socket.AI_PASSIVE)
$ pip install python-nmap
A deprecated alias of OSError, scanner [(2, 1, 6, '', ('0.0.0.0', 21)), (10, 1, 6, '', ('::', 21, 0, 0))]
exception
raised when a system function
socket.error Commands to run NMAP scan
returns a system-related error Script Examples
import nmap
Create list of devices
nmScan = nmap.PortScanner()
exception
raised for address-related errors nmScan.scan('10.1.0.0', '25-443') >>>devices = ['SW1', 'SW2', 'SW3']
socket.herror
Create VLAN dictionary list
NMAP commands used with python
raised for address-related errors vlans = [{'id': '100', 'name': 'staff'}, {'id': '200', 'name':
exception
by getaddrinfo() and 'VOICE'},
socket.gaierror nmScan.scaninfo() # {'tcp': {'services': ‘25-80’, 'method': 'connect'}}
getnameinfo() {'id': '300', 'name': 'wireless'}]
Server-side socket example with nmScan['10.1.0.0']['tcp'].keys() # Results -[80, 25, 22, 135]
>>> def push_commands(device, commands):
Comments nmScan['10.1.0.0'].has_tcp(25) # Result –True/False
print('Connecting to device: ' + device)
for cmd in commands:
# Echo server program
print('Sending command: ' + cmd)
# Import socket module nmScan['10.1.0.0'].has_tcp(21) # Result False/True
import socket Create VLANs in multiple switches using python script
Parsing Modules >>>for vlan in vlans:
# Create a socket object id = vlan.get('id')
s = socket.socket() The argparse module makes it easy to write user-friendly command-line interfaces. The program defines what name = vlan.get('name')
argparse()
arguments it requires, and argparse will figure out how to parse those out of sys.argv print('\n')
# Define the port on which you want to print('Configure VLAN:' + id)
connect Creating a parser >>> parser = argparse.ArgumentParser(description='Process some integers.') commands = get_commands(id, name)
port=1111 for device in devices:
>>> parser.add_argument('integers', metavar='N', type=int, nargs='+', push_commands(device, commands)
# connect to the server on local ... help='an integer for the accumulator') print('\n')
computer Adding arguments >>> parser.add_argument('--sum', dest='accumulate', action='store_const', Citation: https://www.oreilly.com/library/view/network-programmability-and/9781491931240/ch04.html
s.connect(('172.18.0.1', port)) ... const=sum, default=max, Disable router interface using python command
... help='sum the integers (default: find the max)')
# receive data from the server >>> from push import push_commands
print (s.recv(1024)) device = 'router2'
>>> parser.parse_args(['--sum', '7', '-1', '42'])
# close the connection Parsing arguments commands = ['interface Eth0/1', 'shutdown']
Namespace(accumulate=<built-in function sum>, integers=[7, -1, 42])
s.close() push_commands(device, commands)