본문 바로가기
코스웨어/11년 내장형하드웨어

[내장형]백길남_10월18일_일일보고서

by 알 수 없는 사용자 2011. 10. 18.
728x90
반응형

네트워크는 명령을 전달하기위한 수단으로 만들어지게되엇다.

VPN : 은행에서 암호화 와 복호화 하는 장치

소켓을 생성하는 절차는 서버와 클라이언트 차이가 있다.

소켓 API 에서 제공하는 함수로 서버와 클라이언트를 연결할 수 있다.

소켓은 저수준 입 출력에 다 마춰져 있으므로 저수준을 알고 있으면 컨트롤이 가능하다.

소켓 번호에 대고 쓰면 하드 드라이버에 쓰게되고

네트워크에 쓰면 패킷으로 전송이 된다.

socket  man page 을 열어보자.

image 

반환형 이 int  임을 알수가 있다. 그리고

인자도 다 int 형이다. 숫자를 넣어주면된다.


int domain 에는 IP를 선택 하고

int Type 에는 TCP 와 UDP 등을 선택하고

int Protocol 에는 Type 에 따라 선택한다.

그럼 인자 값을 찾기 위해서 헤더 파일을 열어보자.

헤더 파일을 열기 위해서 socket.h 를 찾아가면 <bits/socket.h> 가 보일것이다.

이 헤더 파일을 열면 인자 값들이 나열되어 있다.

image

밑으로 내려가면 다른 인자 값들도 나열되어 있는 모습을 볼수가 있을 것이다.

LOCAL 이 라는 것이 보일것이다. LOCAL 은 현재 컴퓨터를 말하기도 하며 파이프로도 사용이 가능하다.

LOCAL 을 사용하여 컴파일시 에 파일 이 생성되는데 파일속성이 S 가 붙어 있다.

여기서 S 는 소켓을 말한다.

소켓 파일을 사용하여 통신을 할경우 랜선역활을 하게되는데 파일로 통신을 하면 랜카드를 거치지 않고 통신을 할수 있다.


image

잘사용되는 것이 1번과 2번 이다. 3번도 사용이 되는데

3번인 RAW 는 소켓은 만들어지지만 하위 계층없이 만들어진다. 그러므로 RAW 를 사용하면 하위 계층을 다 만들어주어야한다.

마지막 인자를 찾기 위해서

grep 명령을 사용하면 어디에 위치해있는지 알수 가 있다.


[  greap –r IPPROTO_TCP *  ] 인데

여기서 –r 은 하위  디렉토리를 말한다. * 는 모든 파일을 말한다.

linux/in.h 에 들어있는 protocol 이다. 여기서 인자를 골라서 3번째 인자에 넣어주면된다.

image


자이제 소켓을 생성하였으니

IP 와 TCP 를 설정 해주어야한다.

설정해주기위해서 구조체 를 선언한다.

[netinet/in.h]

image

구조체를 선언하고 사용할려고 보니 __SOCKADDR_COMMON(sin_) 이라는 것이 있다.

이것을 찾아보면

[bits/sockaddr.h]

image

위 그림처럼 나와있다.

역슬래시는 밑줄과 윗줄이 한줄이라는 뜻이다.

sa_prefix 인자 자리에 sin_ 가 들어오게되면 sa_prefix 에 sin_ 가 써지고 ## 에 의해서 family 가 자동으로 붙게 된다.

앞단과 뒤단을 붙이기 위해서 ## 을 사용한다.

 [헤더 파일과 전처리 파일 비교]


image

 그러므로 __SOCKADDR_COMMON 매크로함수는 변수 이름에 family 가 자동으로 붙게 만들어 놓은 매크로 함수 이다.

 이제 주소를 변환하여 넣기 위해서 Inet_pton 을 찾아보자.

 image

 인자가 총 3가지가 들어간다.

두번째 인자 문자열을 첫번째 인자로 변환 시켜서 세번째 인자에 복사 시켜주는 함수이다.


inet_pton 에는 리턴되는 종류가 3가지이다.

1. 0 보다 작을경우

2. 0 과 같을 경우

3. 0 보다 클 경우


image


[소스]


image

 

[ 결과 ]

image

inet_pton 함수를 사용하여 st_Addr.sin_addr.s_addr 에 127.0.0.1 을 넣은 것을

inet_ntoa 함수를 사용하여 출력한 모습이다.


728x90