我正在使用socat将TCP套接字转发到Unix域套接字
这是一个示例命令:
socat TCP-LISTEN:<PORT> UNIX-CONNECT:<UNIX DOMAIN SOCKET>
我需要从套接字读取辅助数据,而我的问题是socat正在(从我的TCP套接字)“更改” recvmsg()调用,以及在unix套接字上正常的read()调用。据我了解,read()调用无法获取辅助数据。
我的(python)客户端是远程的,并在tcp套接字上调用recvmsg。
从我客户的痕迹来看:
recvmsg(3, {msg_name(0)=0x7ffc14322490, msg_iov(1)=[{"\360", 1}], msg_controllen=0, msg_flags=0}, 0) = 1
recvmsg(3, {msg_name(0)=0x7ffc14322490, msg_iov(1)=[{"\252", 1}], msg_controllen=0, msg_flags=0}, 0) = 1
这是直接从unix套接字读取的程序的跟踪,我需要的数据是辅助数据中的[5]。这就是我希望远程计算机上的strace如下所示:
recvmmsg(3, {{
{msg_name(0)=NULL, msg_iov(1)=[{"\360", 1}], msg_controllen=20, [{cmsg_len=20, cmsg_level=SOL_SOCKET, cmsg_type=SCM_RIGHTS, [5]}], msg_flags=0}, 1}, {
{msg_name(0)=NULL, msg_iov(1)=[{"\252", 1}], msg_controllen=20, [{cmsg_len=20, cmsg_level=SOL_SOCKET, cmsg_type=SCM_RIGHTS, [6]}], msg_flags=0}, 1}, {
这是socat正在运行/正在执行读取的系统调用的远程处理上的一条记录。请注意,它正在读取msg_iov数据(非辅助数据)。我的客户端上最顶层的recvmsg正在由我的远程计算机上的socat转换为read()调用
read(5, "\360", 8192) = 1
read(5, "\252", 8192) = 1
有没有办法让socat不能将这些recvmsg调用更改为read()调用?
答案 0 :(得分:0)
辅助数据未通过TCP /网络发送。多数民众赞成在我认为的答案,令人沮丧的是很少提供此信息。