Appearance
Transport
3
Transport Encapsulation #
- Frame, Packet, Segment
- Ethernet Payload typ. max. 1500 Byte
- IP Header Typ. 20 Byte, total max size 65'535 byte (with Fragmentation).
- Transport Packet muss ins IP Packet reinpassen.
- Typische Transport MTU (Maximum Transmission Unit) für Transport
- = 1500 - 20 (IP Header) - 20 (TCP Header) = 1460 Byte
- ... um Fragmentation zu vermeiden
19.04.2023
Transport
5
UDP #
- Keine Verbindung
- Non-Acknowledged
- Keine Flow Control
- Kein Retransmit bei Timeout
- Checksum vorhanden
19.04.2023
Transport
6
UDP Sockets #
- Port 0 - 65536
- Mapping zwischen Applikation und OS
- OS: Sockets Interface
python
import socket
def main():
sock = socket.socket(type=socket.SOCK_DGRAM)
sock.bind(("0.0.0.0", 1337))
print("listening on port 1337")
(data, sender) = sock.recvfrom(1024)
print("received: {} from {}".format(data, sender))
if __name__ == "__main__":
main()
19.04.2023
Transport
7
UDP mit netcat #
bash
# senden
echo "HALLO" | netcat -u 1337 10.0.0.1
# empfangen
nc -l 1337 0.0.0.0
# random output generieren
dd if=/dev/urandom bs=1 count=1M | base64
19.04.2023
Transport
8
TCP #
- Transmission Control Protocol
- Verbindungsorientiert
- Timeouts
- Retransmits
- Error detection
- Flow Control
- Segmentierung
- Acknowleged
19.04.2023
Transport
11
- 16 Bit Window
- wieviel Bits können noch gesendet werden (Flow Control)
- window = 0 => Pause
19.04.2023
Transport
12
Ports #
- 0 - 1023 Well Known Ports
20 FTP -- Data
21 FTP -- Control
22 SSH Remote Login Protocol
23 Telnet
25 Simple Mail Transfer Protocol (SMTP)
42 Host Name Server (Nameserv)
53 Domain Name System (DNS)
69 Trivial File Transfer Protocol (TFTP)
80 HTTP
110 POP3
161 SNMP
179 Border Gateway Protocol (BGP)
194 Internet Relay Chat (IRC)
443 HTTPS
444 Simple Network Paging Protocol (SNPP)
19.04.2023
Transport
13
python
import socket
def main():
sock = socket.socket()
sock.bind(("0.0.0.0", 1337))
sock.listen(10)
print("listening on port 1337")
conn, addr = sock.accept()
while True:
data = conn.recv(1024)
print("received: {} from {}".format(data, addr))
if __name__ == "__main__":
main()
19.04.2023
Transport
14
- Kompatibel zu Hostsystem / Targetsystem
- Vorausgesetzt: Host hat Python installiert
- Socket reuse
man socket
bash
python tcp.py
# aus anderem terminal
echo "hello" | netcat localhost 1337
# CTRL+C python Programm
# python programm starten
python tcp.py
OSError: [Errno 98] Address already in use
19.04.2023
Transport
15
python
import socket
def main():
sock = socket.socket()
sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
sock.bind(("0.0.0.0", 1337))
sock.listen(10)
print("listening on port 1337")
conn, addr = sock.accept()
while True:
data = conn.recv(1024)
print("received: {} from {}".format(data, addr))
if __name__ == "__main__":
main()
19.04.2023