1.osi 7 Layer | TCP/IP Layer
쉽게 외우는 방법
Please -1L
Do -2L
Not -3L
Touch -4L
Stive -5L
Pet -6L
Aligator -7L
+프로토콜: 통신 규약(약속)
TCP/IP Layer의 흐름 구조
요청:데이터 통신을 할떄 계층아래로 가면서 정보를 얻는다. 이후 패킷 전송
수신:반대로 2->3->4->5로 진행하면서 패킷 수신
웹통신
ETH/IP/TCP/DATA
0~14/~34/~54/~
ETHERNET HEADER= MACHEADER
구성
Destinate mac/Sourse mac/Ether type
~6/~6/~2
14bytes
Ether type
0800 -> ip 프로토콜 이용
0806 -> arp 통신
08dd ->ipv6
ip header
protocal ID
ip에서 ethernet type 같은 역할
-
tcp(6)->안끊기는거(손상없는거)
-
udp(17)->끊기는거
-
icmp(1)
version
-
4-> 192.221.~~
-
6-> fe80::asd~~~
IHL
5 -> ip header 길이
5-> *4를 해서 20바이트인것을 의미 한줄에 4바이트(32비트) ->ip header 사진 참고
Total length
ip부터 http까지의 길이
tcp hearder
port
-
80->http 포트
-
22->ssh
-
443->https
-
53->dns
socket?
전화기 같은 도구
통신 도구
패킷(destination,sourse)추출 파이썬 코딩
import socket
import struct
conn = socket.socket(socket.AF_PACKET, socket.SOCK_RAW, socket.htons(3))
def IP(ip):
res=str(int(ip[0]))
res+="."
res+=str(int(ip[1]))
res+="."
res+=str(int(ip[2]))
res+="."
res+=str(int(ip[3]))
return res
def MAC1(mac):
res=str(hex(mac[0]))[2:4]
res+=":"
res+=str(hex(mac[1]))[2:4]
res+=":"
res+=str(hex(mac[2]))[2:4]
res+=":"
res+=str(hex(mac[3]))[2:4]
res+=":"
res+=str(hex(mac[4]))[2:4]
res+=":"
res+=str(hex(mac[5]))[2:4]
return res
while True:
data, addr = conn.recvfrom(65536)
dst_mac,src_mac,ef= struct.unpack("! 6s 6s H", data[:14])
ip_pro,t,dst_ip,src_ip=struct.unpack("! c 2s 4s 4s", data[23:34])
src_port,dst_port=struct.unpack("! H H", data[34:38])
print(ip_pro)
print("Destination: ",MAC1(dst_mac),"\n","source MAC: ", MAC1(src_mac))
if ef==0x800:
print("destination MAC: ",IP(dst_ip), "\n","Source MAC: ",IP(src_ip))
if ip_pro==b'\x06':
print("Source Port: ",src_port,"\n","Destination Port: ",dst_port)
else:
print("tcp가 아님")
else:
print("ip가 아님")
print(" ")
tcp echo server client(client에서 전송한값 server에서 받기)
tcp server 소스
import socket
HOST = "172.31.9.19" //자신의 ip설정
PORT= 6804 //원하는 포트 설정
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()
tcp client 소스
import socket
HOST ='172.31.9.125' //접속하려는 ip
PORT =7761 //접속하려는 포트
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()))
'네트워크' 카테고리의 다른 글
airodump-ng(802.11 packet 잡기) (0) | 2021.02.15 |
---|---|
와이파이 연결과정(IEEE 802.11) (0) | 2021.02.15 |
deauth attack(aireplay-ng) (0) | 2021.02.09 |