목록Study (21)
이상한 코딩 나라의 혜돌이
패킷을 예쁘게 만들어서 보냈으면 당연히 받을 때도 예쁘게 받아줘야 한다. 물론 그냥 scapy에서 제공하는 hexdump(pkt) 또는 pkt.show()로 볼 수도 있지만, 그러면 필드값 추출하기가 너무 너무 너무 너무 까다로워진다. send.py 짜는 법은 여기에서 확인 1. send.py에서 정의한 그대로 커스텀 헤더를 작성해 준다 class custom_header(Packet): """Custom Header""" name = "custom header" fields_desc = [ BitField("field1", 0, 16), # BitField("field_name", initial value, byte_length) BitField("field2", 0, 8), BitField("fiel..
사실 원하는 헤더를 직접 만들어서 패킷을 보낼 일은 많지 않다. 그래도 연구 하시는 분들에게는 도움이 될 수도 있으니까 + 나도 볼 겸 정리를 해 본다. 1. 원하는 패킷의 헤더를 Class 형태로 정의한다 class custom_header(Packet): """Custom Header""" name = "custom header" fields_desc = [ BitField("field1", 0, 16), # BitField("field_name", initial value, byte_length) BitField("field2", 0, 8), BitField("field3", 0, 8) ] BitField(원하는 필드 이름, 0, 비트수)로 리스트 형태로 정의해 주면 된다. 두 번째 파라미터는 무슨..
git branch : 내 로컬 저장소 branch들 확인하기 git status : 현재 git 상태 확인하기 (뭐가 tracking 되고 있는지 그런거) git log : commit log 확인하기 (commit hashcode(?)랑 메시지 등등 다 확인 가능) git shortlog : commit log 확인하는데 짧게 한눈에 확인하기! git checkout [branch_name] : branch 바꾸기! git add [file_name] : commit 할 파일 추가하기 git commit -m "[commit_message]" : 메시지와 함께 commit 하기 git push [remote_repo] [local repo] : 원격 저장소에 내 로컬 저장소 push 하기 (강제로 하..
라즈베리 파이의 와이파이 설정이 안 될때는 다음 과정을 차례대로 따라해 보자. 먼저 초기 네트워크 설정을 아래와 같이 지정해준다 $ sudo vi /etc/network/interfaces source-directory /etc/network/interfaces.d auto loiface lo inet loopback iface eth0 inet dhcp allow-hotplug wlan0iface wlan0 inet manualwpa-conf /etc/wpa_supplicant/wpa_supplicant.conf 네트워크를 재시작하거나 재부팅한다 $ sudo /etc/init.d/networking restart 사용 가능한 와이파이 이름을 검색한다 $ sudo iwlist wlan0 scan 리스트의..
호스트에서 호스트로 메시지를 전송하려고 할 때, 개발자는 어떻게 코드를 작성할까? 먼저 소켓을 생성(socket 함수)하고, 다른 호스트와 connect를 하면(connect 함수), 소켓 객체에는 예를 들어 아래와 같은 정보들이 담기게 된다. (python, TCP socket 기준. 다른 언어도 비슷하다) 송신자에서 이 소켓에 메시지를 작성하면, 수신자는 소켓에서 메시지를 읽어오고, 같이 담겨온 주소로 다시 메시지를 전송한다. 조금 더 직관적으로 보면, 위의 그림처럼 나타낼 수 있다. 따라서 개발자는 네트워크 프로그래밍을 할때, Socket API를 이용하며 그 아래 레이어는 전혀 신경쓰지 않고 개발하는 것이 가능하다. 그럼 Socket API는 어느 레이어에 존재할까? 대부분의 강의 자료에서 아래와..
OTT란, OTT는 Over The Top의 약자이며, 기존의 TV가 아닌 인터넷이 가능한 다양한 기기를 통해 시청 가능한 컨텐츠를 의미. 기존 TV는 KT, LG 등의 회사에 가입하고, 특정 망에 종속되어 컨텐츠를 이용할 수 있었음. (케이블 방송은 돈을 더 내고 보고...) 반면에 OTT는 인터넷을 통해 시청하므로 내가 어떤 망을 사용하는지와 상관없이 컨텐츠를 이용할 수 있음. 유튜브와 넷플릭스 같은 서비스가 대표적인 OTT 서비스라고 할 수 있음. OTT가 등장하면서, 각종 규제, 지상파 방송사와 방송 컨텐츠 계약, 망 중립성, 불법 및 유해 컨텐츠 규제 등과 관련된 이슈들이 같이 떠올랐음. CDN (Content Distribution Networks) 넷플릭스와 같은 회사들이 자신들이 가진 서버..
들어가기 앞서 MavenBom에 대해서 간단히 알아보자. BOM은 Bill Of Materials의 약자이다.BOM은 프로젝트의 dependency 버전을 제어하고 해당 버전을 정의하고 업데이트하는 중앙 위치를 제어하는 특별한 종류의 POM이다.MavenBom을 사용하면 우리가 필요한 dependency의 버전을 신경쓰지 않고 프로젝트에 dependency를 추가할 수 있다고 한다. 자세한 내용은 여기로 내가 이해한 바로 간단히 설명해 보자면, mavenBom은 프로젝트에 추가한 dependency를 관리해주는 역할을 하는 것 같다.예를 들면 충돌 방지나, 버전 업데이트 뭐 그런 거..? 그런데 무슨 일인지, 내 컴퓨터에서는 mavenBom을 사용할 수가 없었다. 뻥 안 치고 intellij를 오백 번 ..
소켓에서 읽어온 메시지를 write 함수로 출력하고 이어서 printf 함수를 썼을 때 출력 시점과 모양이 이상하게 되는(?) 문제가 발생했다. write = write(1, buf, read);...printf("\nInput Word: "); 실제 출력해보면 개행이 사라지는 등 이상한 .... 현상이 생겼다. 교수님께 여쭤보니, stdout에 출력할 때 write 함수와 printf 함수를 섞어서 사용했기 때문에 발생한 문제라고 하셨다.또 추가로 찾아보니 write 함수는 버퍼에 있는 내용을 그대로 출력하고 printf 함수는 표준 출력 모드로 동작하여 종료 문자('\n', '\0')를 만났을 때 내용을 출력한다고 한다. 문제를 해결하기 위해서는,printf 또는 write 함수 중 하나로 통일해서 ..
C언어에서 클라이언트와 통신하기 위한 서버 프로그램을 작성할 때, 소켓을 사용한다. bind 단계에서는, sin_family, sin_addr, sin_port 등을 설정한다.프로그램 작성 후 디버깅 및 테스팅을 위해 서버 프로그램을 강제 종료하고, 포트 번호 변경 없이 바로 실행시키면 bind error가 발생한다.그 이유는 해당 포트를 이미 사용하고 있어서 발생하는 문제이며 기존 프로그램은 종료되었지만 비정상 종료된 상태로 아직 커널이 bind 정보를 유지하고 있기 때문에 발생하는 문제이다. 이때, bind에 사용 되는 소켓의 설정을 약간 변경해 주면 해당 문제를 해결할 수 있다.setsockopt라는 함수로 소켓 설정을 변경할 수 있다. 위 함수로 소켓에 SO_REUSEADDR 옵션을 주면 기존에 ..
처음으로 AWS 서버를 파고 나서 ip 받은 김에 터미널로 ssh 접속을 해 보려고 했는데.. ➜ ssh ubuntu@xx.xxx.xxx.xx 나에게 돌아온 메시지는 ubuntu@xx.xxx.xxx.xx: Permission denied (publickey). 뜨든... ㅠㅠ그래서 이런저런 체크를 해 보았다. 첫 번째 : 보안 그룹 연결 확인 및 인바운드 체크 내가 판 인스턴스와 적절한 보안 그룹을 연결해 두었는지를 먼저 확인!연결된 보안 그룹의 인바운드에 ssh 포트 (22) 가 열려있는지 확인!!!! 다 잘 되어있었음.. 두 번째 : 사용자 이름이 틀렸나?Amazon Linux 2 또는 Amazon Linux AMI의 경우 사용자 이름은 ec2-user입니다.Centos AMI의 경우 사용자 이름은 ..