strace
클라이언트 애플리케이션 오류에 대해 실행했는데 다음과 같은 결과가 나왔습니다.
socket(PF_LOCAL, SOCK_SEQPACKET|SOCK_CLOEXEC|SOCK_NONBLOCK, 0) = 3
setsockopt(3, SOL_SOCKET, SO_PASSCRED, [1], 4) = 0
connect(3, {sa_family=AF_LOCAL, sun_path="/path/to/socket"}, 19) = -1 EPROTOTYPE (Protocol wrong type for socket)
close(3) = 0
exit_group(2) = ?
+++ exited with 2 +++
나는 그런 다음추측하다다양한 매개변수를 사용하여 소켓을 에뮬레이션하여 소켓 유형을 변경했지만 socat
소용이 없었습니다.
나는 또한 이 답변의 코드를 보았습니다.여기, 그러나 기존 소켓을 사용하지 않고 소켓을 만드는 것으로 보이며 경로에서 소켓을 얻는 방법을 찾을 수 없는 것 같습니다.
소스 코드를 자세히 조사하지 않고도 소켓 경로(존재하는 경우)에서 기존 소켓의 세부 정보(예: 프로토콜 유형)를 쉽게 확인할 수 있는 방법이 있습니까?
답변1
당신이 사용할 수있는 lsof /path/to/socket
:
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
hindsight 19619 root 6u unix 0xffff88038612b480 0t0 257123917 /path/to/socket
이를 알면 PID
프로세스 자체에 대해 더 자세히 알아볼 수 있습니다.
cat /proc/19619/io
rchar: 11635200437
wchar: 2722080850
syscr: 16905056
syscw: 920240
read_bytes: 36397568
write_bytes: 3515994112
cancelled_write_bytes: 760422400
ss
또는 모든 Unix 소켓을 표시하는 데 사용할 수도 있습니다 .
ss -x
-x
Unix 도메인 소켓 표시-e
자세한 소켓 정보 표시-m
소켓 메모리 사용량 표시
일부 유형을 필터링할 수 있습니다.
ss -x -A unix_stream