Introduction to Information Security Networking 1
DISCLAIMER Networking, in 1 hour. I'll be oversimplifying. 2
The Physical Layer Physical 3
The Data Link Layer HW1 HW2HW3HW4HW5HW6 HW7 Physical Data Link 4
The Network Layer HW1 HW2HW3HW4HW5HW6 HW7 HW1 HW2HW3HW4HW5HW6 HW7 router Physical Data Link Network (IP) My Home WiFi (802.11) Google Ethernet
Special Cases - NATs HW1 HW2HW3HW4HW5HW6 HW7 HW1 HW2HW3HW4HW5HW6 HW7 gateway Physical Data Link Network (IP) My Home WiFi (802.11) Google Ethernet
Special Cases - Localhost HW1 HW2HW3HW4HW5HW6 HW7 HW1 HW2HW3HW4HW5HW6 HW7 gateway Physical Data Link Network (IP) My Home WiFi (802.11) Google Ethernet
The Transport Layer HW1 HW2HW3HW4HW5HW6 HW7 HW1 HW2HW3HW4HW5HW6 HW7 router Physical Data Link Network (IP) My Home WiFi (802.11) Google Ethernet Transport (TCP)
The Rest HW1 HW2HW3HW4HW5HW6 HW7 HW1 HW2HW3HW4HW5HW6 HW7 router Physical Data Link Network (IP) My Home WiFi (802.11) Google Ethernet Transport (TCP) Session Presentation Application OSI Model Physical Application TCP/IP Network (IP) Transport (TCP) HTTP(S) DNS 9
Abstraction ( IP A, port A, IP B, port B ) 10
Sockets Client Server listener = socket.socket() listener.bind((' ', 8000)) listener.listen(5) conn, addr = listener.accept() while True: data = conn.recv(4096) conn.send(data) conn = socket.socket() conn.connect((' ', 8000)) while True: data = input() conn.send(data) print conn.recv(4096) 11
Socket Patterns listener.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) listener.bind(('', 8000)) data = conn.recv(4096) if not data: break 12
Summary The server: Creates a socket Bind it to some IP address and some port Starts listening for connection (allocates a queue with backlog slots) Accepts a connection from the queue and handles it The client: Creates a socket Connects to some IP address and some port Both Send data Receive data 13
And Now In C! int listener, conn, addrlen; struct sockaddr_in listener_addr, conn_addr; char buff[1024]; listener = socket(AF_INET, SOCK_STREAM, 0)); listener_addr.sin_family = AF_INET; listener_addr.sin_port = htons(8000); listener_addr.sin_addr.s_addr = INADDR_ANY; bind(listener, (struct sockaddr*) &listener_addr, sizeof(listener_addr)); listen(listener, 5); addrlen = sizeof(conn_addr); conn = accept(listener, (struct sockaddr*) &conn_addr, &addrlen); while (1) { recv(conn, buff, 1024, 0); send(conn, buff, 1024, 0); } 14
And Now In C! int conn; struct sockaddr_in addr; char buff[1024]; conn = socket(AF_INET, SOCK_STREAM, 0)); addr.sin_family = AF_INET; addr.sin_port = htons(8000); addr.sin_addr.s_addr = inet_addr(" "); connect(conn, (struct sockaddr*) &addr, sizeof(addr)); while (1) { fgets(buff, 1024, stdout); send(conn, buff, 1024, 0); recv(conn, buff, 1024, 0); printf("%s\n", buff); } 15
And Now in netcat ! 16