OSI 7Layer
Ethernet Header
ethertype은 이후 3계층의 프로토콜을 정의
IP Header
protocol은 이후 4계층을 정의
TCP Header
Training 1 : Network packet extract
import socket # socket same device
import struct
conn = socket.socket(socket.AF_PACKET, socket.SOCK_RAW, socket.htons(3)) # AF == Addresss Familly
def IP(ip):
res = ""
for i in range(4):
res += '%d' % ip[i]
if i != 3:
res += '.'
return res
def MAC(mac):
res = ""
for i in range(6):
res += '%02X' % mac[i]
if i != 5:
res += ':'
return res
while True :
data, addr = conn.recvfrom(65536)
dst_mac, src_mac,eth_typ = struct.unpack('! 6s 6s H ', data[:14])
trash1,pro, trash2, src_ip, dst_ip = struct.unpack('! 9s 1s 2s 4s 4s', data[14:34])
src_port, dst_port = struct.unpack('! H H', data[34:38])
if eth_typ == 0x800:
if pro[0] == 0x6:
print("source MAC", MAC(src_mac))
print("destination MAC", MAC(dst_mac))
print("source IP", IP(src_ip))
print("destination IP", IP(dst_ip))
print("source port", src_port)
print("destination port", dst_port)
함수
htons() : (Host to network short)
Host 시스템에서 Network로 short 형 데이터를 보낼 때 바이트 오더를 바꾸어주는 함수
htonl() : (Host to network long )
long 형 데이터의 바이트 오더를 바꾸어주는 함수
ntohs() : (Network to host short)
Network에서 Host로 short형 데이터의 바이트 오더를 바꾸어주는 함수
ntohl() : (Network to host long)
long 형 데이터의 바이트 오더를 바꾸어주는 함수
Training 2 : TCP echo Server/Client
# echo server
import socket
HOST = ip주소 #127.0.0.1 same localhost
PORT = 포트번호
s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
print("binding...")
s.bind((HOST,PORT))
print("success to bind")
s.listen()
print("Listen...")
c, addr = s.accept()
print("Connected by", addr)
while True:
data = c.recv(65536)
if not data:
break
print('Received from',addr,data.decode())
c.sendall(data)
c.close()
s.close()
# client
import socket
HOST = ip주소 #127.0.0.1 same localhost
PORT = 포트번호
c = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
c.connect((HOST, PORT))
while True:
data = input().encode()
if data == b'exit':
c.close()
break
c.sendall(data)
data = c.recv(65536)
print('Received', repr(data.decode()))
집에 있는 Desktop(client)과 노트북(server)간의 통신을 해보았다.
한 가지 주의 할 것은 윈도우에서 통신을 할 때 명령프롬포트를 관리자 권한으로 들어가야한다.
htons함수 관련 출처:https://fattarzan.tistory.com/entry/htonl-htons-ntohl-ntohs[뚱보타잔]
'프로젝트' 카테고리의 다른 글
Netteok 팀 프로젝트 (0) | 2020.08.31 |
---|---|
Network webserver (0) | 2020.06.27 |
Windows Software Zer0-day hunting (0) | 2020.02.21 |
1-day Exploit 실습 (1) | 2020.02.21 |
SEH overwrite (0) | 2020.02.17 |