나는 실패 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