사용자 공간 또는 커널에서 C를 사용하여 Linux에서 열린 소켓 (소켓 주소 또는 소켓 설명자)의 목록을 가져 오는 방법이 있습니까?C를 사용하여 Linux에서 열린 소켓 목록을 얻는 방법은 무엇입니까?
당신에게
사용자 공간 또는 커널에서 C를 사용하여 Linux에서 열린 소켓 (소켓 주소 또는 소켓 설명자)의 목록을 가져 오는 방법이 있습니까?C를 사용하여 Linux에서 열린 소켓 목록을 얻는 방법은 무엇입니까?
당신에게
열기를 감사하고 다음 읽기 :
/proc/net/tcp
을 -
/proc/net/udp
열려있는 TCP 소켓
/proc/net/raw
- 모든 목록을 "raw"소켓
이들은 "일반"파일과 비슷합니다. filehandle을 사용하면 각 소켓에 대해 필요한 모든 정보를 얻을 수 있습니다.
원시 데이터는/proc/net/tcp,/proc/net/udp 등에서 찾을 수 있습니다. 첫 번째 줄의 헤더를 참조하여 간결한 설명을 찾으십시오. 디렉토리/proc 디렉토리/셀프에서
/당신에게 열려있는 모든 파일 설명을주고 가짜 심볼릭 링크가 디스크립터에 - 소켓 같은 것을 제공 :
lrwx------ 1 root root 64 2009-05-08 07:45 4 -> socket:[4921]
lrwx------ 1 root root 64 2009-05-08 07:45 5 -> socket:[4918]
lrwx------ 1 root root 64 2009-05-08 07:45 6 -> socket:[5395]
, 그들이했던 opendir 사용 readdir을()를 반복하고 readlink를을 사용하여 심문을()
FD4가 소켓이라는 것을 알고 있다면 getsockname()을 호출하여 바인딩 된 경우 로컬 주소 패밀리, 주소 등을 얻을 수 있습니다.
이것은 모든 소켓에서 작동하지 않습니다. 대부분 여기에 제 터미널이 있습니다. 여러 연결을 열면 모든 소켓이 표시되지는 않습니다. 셰인 메이슨 (Shane Mason)이 지적한 것 이외에 가지고 있지 않은 좋은 도구. 고맙습니다. –
이 프로그램은 당신을 위해 유용하고/그물/proc 디렉토리/* 파일
예를 들어 주셔서 감사합니다. 나는/proc/self/fd를 거쳐 어떤 링크가 소켓인지 확인하고 그런 식으로리스트를 생성하려고했다. 내 솔루션과 함께 업데이트를 게시하겠습니다. 다시 한 번 감사드립니다. –
링크가 더 이상 작동하지 않는 것으로 보이지만 Google에서 여러 복사본을 검색합니다. –
또한/proc 디렉토리/그물/유닉스 유닉스 도메인 소켓을 나열 sockstat.c을 구문 분석하는 방법을 보여줍니다 수 있습니다. – zoom23