Nitraqu의 블로그

nitraqu.egloos.com

포토로그



raw_socket, netstat, ss C/C++

잠시 확인해 볼 것이 있어 raw_socket으로 프로그래밍을 해 보았다.

https://www.binarytides.com/raw-udp-sockets-c-linux/
- 대략 raw_socket 을 만들어서
- UDP 구조체 데이터를 채워 놓고, 
- source-port 6666 / dest-port 8622 로 패킷을 보내는 예제 

에 기반해서 프로그램을 짜고 테스트를 해 보았더니 

nitraqu@ubuntu:~$ netstat -ano  | grep udp
udp        0      0 0.0.0.0:5353            0.0.0.0:*                           off (0.00/0/0)
udp        0      0 0.0.0.0:40909           0.0.0.0:*                           off (0.00/0/0)
udp        0      0 127.0.0.53:53           0.0.0.0:*                           off (0.00/0/0)
udp        0      0 192.168.88.133:68       192.168.88.254:67       ESTABLISHED off (0.00/0/0)
udp        0      0 0.0.0.0:631             0.0.0.0:*                           off (0.00/0/0)
udp6       0      0 :::5353                 :::*                                off (0.00/0/0)
udp6       0      0 :::46525                :::*                                off (0.00/0/0)


와 같이 해당 포트가 보이지 않았다. 

뭔가 그래도 볼 수 있는 명령어가 있지 않을까 검색해 보니 
'ss' 라는 명령어가 있었다. 
(https://unix.stackexchange.com/questions/481435/ss-shows-a-raw-socket-what-does-it-mean-that-it-is-listening-on-ipproto-255) 

man으로 검색해 보니 한 줄 설명으로 '소켓을 조사하는 유틸리티' 라고 한다. 

ipproto-255 로 grep을 하면 

nitraqu@ubuntu:~$ sudo ss -ap  | grep ipproto-
???     UNCONN   0        0                                             0.0.0.0:ipproto-255                                          0.0.0.0:*                   users:(("raw_udp",pid=28428,fd=3))          

뭔가 나오는 것을 볼 수 있다. 

그리고 raw_socket을 열었던 프로세스 명까지 확인해 볼 수 있다. 

-----------

추가로 다시 확인하다 보니...

netstat에서도 확인할 수 있었다. 

nitraqu@ubuntu:~$ sudo netstat -ap | grep raw
raw        0      0 0.0.0.0:255             0.0.0.0:*               7           28428/./raw_udp     
raw6       0      0 [::]:ipv6-icmp          [::]:*                  7           705/NetworkManager  

1. udp가 아니라 raw로 나오는 것 뿐이었다. 
2. root 권한이 있어야 한다. 


덧글

댓글 입력 영역