strace
프로그램을 추적하는 데 사용합니다 . 이 줄에서:
recvfrom(7, "\0\260R\0\0\1\364\6\215\r\257\330\210\341\0\270\240\0\260R\0\0\0\0\0\0\0\0\0\0\0\0"..., 3000, 0, {sa_family=AF_PACKET, proto=0x88e1, if4, pkttype=PACKET_OUTGOING, addr(6)={1, f4068d0dafd8}, [18]) = 60
처음 7개는 읽기에 사용되는 파일 설명자입니다(참조:여기).
그 소켓을 누가 열었는지 알 수 있나요? 프로세스가 열린 파일 목록을 /proc에 보관한다는 것을 알고 있습니다(제 생각에는?). 그렇다면 해당 fd 등을 연 모든 프로세스 목록에서 찾을 수 있습니까?
감사해요
답변1
누가 소켓을 열었는지 알 수 없지만 프로그램은 다른 프로그램에서 파일을 열 수 없습니다. 따라서 소켓은 추적 중인 프로세스(또는 나중에 분기된 상위 프로세스 중 하나)에 의해 열렸거나 이미 열려 있었습니다. 프로그램을 호출할 때(프로그램이 사용하는 소켓인 경우 가능성이 낮음)
따라서 파일 설명자 7을 열게 하는 시스템 호출을 찾을 때까지 추적을 자세히 살펴보세요. 소켓의 경우 다음과 같을 수 있습니다.connect
프로세스가 클라이언트인 경우accept
서버라면. 호출은 파일 설명자를 무작위로 조정하는 호출일 수도 있습니다.dup2
, 이 경우 중복 설명자를 추적해야 합니다.
소켓이 통신하고 있는 다른 프로세스를 알고 싶다면 다음을 참조하세요.이 유닉스 소켓 쌍의 반대쪽 끝을 갖고 있는 사람이 있나요?