질문: 소켓 프로그래밍에서 주소인식
글쓴이: cs010101 / 작성시간: 월, 2007/04/16 - 1:58오후
안녕하세요. 질문이 있습니다.
unsigned char *ip_address="\xC0\xA8\x00\x02";
... 중략 ...
sock_buff = *skb;
... 중략 ...
if(sock_buff->ng.iph->saddr == *(unsigned int*)ip_address){
... 중략 ...
}
...
이렇게 있을 때,
unsigned char *ip_address="\xC0\xA8\x00\x02";
와
*(unsigned int*)ip_address
이것의 관계를 알고 싶습니다.
만약, *(unsigned int*)ip_address 대신에 직접 값을 입력한다면,
어떻게 입력해야 하나요?
감사합니다.
Forums:
*(unsigned int*)ip_address
*(unsigned int*)ip_address 의 의미는 sock_buff->ng.iph->saddr 가 ip v4에서 주소가 4byte이니, 그냥 assign하는 거네요. saddr이 어떤 type으로 선언되어 있는지는
귀차니즘으로 그냥 패스 -_-;; 주소가 192(0xC0).168(0xA8).0(0x00).2(0x02) 군요
값을 직접 입력하신다는 의미는, 정확히는 잘 모르겠으나, 예를 들어 입력 받은 ip addr을
넣어야 한다는 말씀이시라면, inet_addr()함수를 사용하셔서 리턴 값을 할당 하시면 될 듯 합니다.
ex)
in_addr_t addr= inet_addr("127.0.0.1") ;
if(addr == -1)
{
// error!
}
sock_buff->ng.iph->saddr= addr ;
ip 어드레스의 본래
ip 어드레스의 본래 정체는 32비트 숫자입니다.
사람이 좀 보기 좋게 8비트씩 나눈 다음 각 8비트를 10진수로 환산한 값을 쓰고 그 사이를 점으로 찍어서 쓰는 특이한 표기법을 쓸 뿐이죠.
그리고 big-endian으로 해야 합니다. x86일 경우에 이걸 해주는게 htonl()이죠.
Written By the Black Knight of Destruction
Written By the Black Knight of Destruction
댓글 달기