일반적으로 네트워크 I/O 디버깅에는 tcpflow
을 사용하지만 프로세스별로 필터링 할 수있는 방법이없는 것 같습니다. 따라서 수동으로 어떤 파일이 필요하다고 판단해야합니까? 프로그램이 디버깅 중이고 완전히 관련없는 트래픽입니다. 일반적으로 둘 다 대부분 http이므로 포트 필터링은 문제가되지 않으며 원격 호스트 이름으로 필터링하는 것은 때때로 가능합니다.프로그램의 모든 네트워크 입출력 저장
이론 상으로는 효과가 있습니다. 프로세스 ID는 소켓과 연관 될 수 있습니다. 최소한 /proc/net/tcp
은 소켓 주소 쌍을 inodes와 연결하고 fstat
을 /proc/*/fd/*
은 모든 소켓 inode를 프로세스로 표시합니다 (즉, netstat -p
이 사용합니다). 그러나 트래픽 캡처 프로그램에서 실시간으로 처리해야합니다 그렇지 않으면이 데이터는 모두 사라집니다. 그래서 나중에 올바른 파일을 grep 할 수 없습니다. (otoh 이것이 OSX에서도 가능할 지 모르겠다.)
또 다른 가능성은 외부 모니터 대신 프로그램이 시작될 때 LD_PRELOAD
과 같은 일종의 저수준 라이브러리 주입을 사용하는 것입니다.
프로그램에서 모든 단일 네트워크 읽기 및 쓰기를 찾는 대안과 로깅 코드를 추가하는 것은 고려하기에 너무 무서운 것입니다. 특히 실제 I/O는 많은 경우 제 3 자 라이브러리에 깊숙이 묻혀 있기 때문에 특히 그렇습니다.
어떤 권장 사항이 있습니까? 크로스 플랫폼이 완벽 할 수는 있지만, OSX 또는 Linux에서 작동한다면 충분합니다.
해킹이지만 strace를 사용하면 일부 범위를 좁힐 수 있습니다. 로컬 및 네트워크 모두의 모든 읽기 및 쓰기를 볼 수 있습니다. – qdot