raw 소켓 생성이 안됩니다..

sharefeel의 이미지

icmp ping을 하기 위해서 소켓을 생성하려고 하는데..
일반 유저 권한으로 raw 소켓이 생성이 안됩니다.

소스 코드
id->sockfd[i] = socket(AF_INET, SOCK_RAW, IPPROTO_ICMP);
if (id->sockfd[i] < 0)
{
      DPRINTF("socket() returned %d\n\t%s\n",
              id->sockfd[i], strerror(errno));
}

실행 결과
id.c [41] id_init socket() returned -1
        Permission denied

root 권한으로 실행하면 소켓 잘 생성됩니만..
raw 소켓 생성하려면 root권한이 반드시 필요한 것인지요..
플랫폼은 솔라리스 입니다..

ps. 솔라리스에선 일반 유저는 ping이 path도 안걸려 있네요..

pynoos의 이미지

네 raw 소켓을 쓰려면 root 권한이 필요합니다.
따라서 setuid 된 바이너리가 필요합니다.

# ls -l /usr/sbin/ping
-r-sr-xr-x 1 root bin 19452 Jul 15 1998 /usr/sbin/ping

cychong의 이미지

raw socket의 경우 원한다면 IP header를 제어할 수 있습니다.
그래서 보안상의 문제도 있고 해서 루트만이 raw socket을 생성/사용할 수 있습니다. :-)

Life with fun...

jyj9782의 이미지

그러니까 내 데이타가 아닌데도, 로우소켓으로 IP 데이타를 잡아볼수 있다는데에 문제가 발생하니, root 권한이 있는 사용자만이 가능하게 되어 있는거죠.

힘내세요.