标签: socket

为什么文件重定向到命名管道和从命名管道重定向不工作,但管道到 cat 呢?

这是一个简单的 Unix 回显服务器,使用 nc:

mkfifo fifo
cat fifo | nc -k -l 4458 -v | cat >fifo
Run Code Online (Sandbox Code Playgroud)

(基于

正如我所见,数据流的工作原理如下:

fifo (my named pipe)
 |
 | (using cat)
 |
 v
nc
 |
 | (using cat)
 |
 v
fifo 
Run Code Online (Sandbox Code Playgroud)

这里有一个问题:为什么这不起作用?

nc -k -l 4458 -v >fifo <fifo
Run Code Online (Sandbox Code Playgroud)

你会发现,如果试图telnetlocalhost4458,你会得到一个“连接被拒绝”的错误。

pipe socket fifo

9
推荐指数
1
解决办法
950
查看次数

如何“跟踪”一个unix域套接字?

有点难以解释,但我注意到在strace打开套接字的 PID时我看不到任何通信。如何坐在套接字文件的中间观看通信?

socket strace linux-kernel

8
推荐指数
1
解决办法
2万
查看次数

ss 正在取代 netstat,我怎样才能让它像我习惯的那样列出端口?

我一直在尝试使用 Linux 使我的方式现代化,一方面,放弃 netstat 为 ss。我在 ss 手册页中查找了我最喜欢的 netstat 命令行标志,很高兴地发现它netstat -lnpss -lnp. 或者我以为...

# ss -lnp | grep 1812
Run Code Online (Sandbox Code Playgroud)

什么都没有,但是

# netstat -lnp | grep 1812
udp        0      0 0.0.0.0:1812            0.0.0.0:*                           11103/radiusd
Run Code Online (Sandbox Code Playgroud)

做。这一事实使特定的故障排除变得不必要地更加困难。

现在我试图了解我应该如何使用 ss 来验证守护进程是否在监听。

有人可以解释一下吗?

编辑:

# ss --version
ss utility, iproute2-ss090324
# ss -aunp | grep radi
UNCONN     0      0                         *:50482                    *:*      users:(("radiusd",11103,11))
UNCONN     0      0                 127.0.0.1:18120                    *:*      users:(("radiusd",11103,9))
UNCONN     0      0                         *:1812                     *:*      users:(("radiusd",11103,6))
UNCONN     0      0                         *:1813                     *:*      users:(("radiusd",11103,7))
UNCONN     0 …
Run Code Online (Sandbox Code Playgroud)

linux command-line networking socket netstat

8
推荐指数
1
解决办法
2万
查看次数

对使用 SIGSTOP 停止的服务的请求会发生什么

如果您向 Web 服务器发送 SIGSTOP,内核是否只是告诉网络堆栈阻止/休眠与该服务器套接字的所有连接,直到它继续?服务器超时值似乎无关紧要;它会无限期地等待,但是如何呢?

请求会无限期地位于套接字缓冲区中吗?如果 Web 服务器收到大量请求怎么办?当套接字缓冲区填满时会发生什么?

linux networking signals socket

8
推荐指数
1
解决办法
850
查看次数

X.org 在 chroot 中没有套接字?

我有一个 chroot 设置,我一直在运行图形应用程序,没有问题。我所做的唯一设置是设置DISPLAY=:0并且它有效。但是,我一直认为 Unix 域套接字用于 X11,所以我无法弄清楚为什么会这样。我做了一些挖掘,结果证明我是对的。我的 X.org 服务器是用-nolisten tcp标志启动的,我有一个 unix 域套接字,/tmp/.X11-unix但不知何故我的 chroot 可以在没有任何套接字的情况下在该 X11 显示器上启动图形应用程序。我从来没有将套接字硬链接到 chroot,事实上它们甚至不在同一个文件系统上。/tmp/.X11-unix在 chroot 上是完全空的。我的 chroot 怎么可能在我的 X11 显示器上启动图形应用程序?

linux chroot xorg x11 socket

8
推荐指数
1
解决办法
643
查看次数

"&gt;&amp;1" 和 "&gt;/proc/self/fd/1" 重定向有什么区别?

我正在处理一些rc.local在启动时运行的脚本,我注意到输出重定向的工作方式很奇怪。

如果我写了类似的东西echo "foo" >&1,它最终会出现在系统日志中,一切都很好。

但是当我写echo "foo" >>/dev/stdout, or 时echo "foo" >>/proc/self/fd/1,我收到一个错误,说没有这样的设备或地址。

进一步调查显示,这/proc/self/fd/1实际上是一个套接字。ls -l /proc/self/fdrc.local印刷品中包括以下内容:

lr-x------. 1 root root 64 Jul 14 05:28 0 -> /dev/null
lrwx------. 1 root root 64 Jul 14 05:28 1 -> socket:[18485]
lrwx------. 1 root root 64 Jul 14 05:28 2 -> socket:[18485]
lr-x------. 1 root root 64 Jul 14 05:28 255 -> /etc/rc.d/rc.local
Run Code Online (Sandbox Code Playgroud)

所描述的行为可以很容易地重现nc。首先,找出哪个文件描述符绑定到套接字。您可以通过nc -l -p 25566 -c …

bash io-redirection socket

7
推荐指数
1
解决办法
1万
查看次数

如何限制随机端口套接字的范围?

我需要运行一个二进制文件,它使用bind零端口参数,从系统中获取一个随机的空闲端口。有没有办法限制允许内核选择的端口范围?

networking kernel tcp sysctl socket

7
推荐指数
2
解决办法
4070
查看次数

SELinux 和 docker:允许访问 /tmp/.X11-unix 中的 X unix 套接字

如何允许在启用 SELinux 的情况下访问特定 docker 容器的特定 X unix 套接字?我更喜欢设置为docker run --security-opt.

在 Fedora 25 上,我发现 docker 守护进程--selinux-enabled默认运行。从主机访问共享文件--volume被拒绝。可以允许访问设置标志z。例子:--volume $HOME:$HOME:rw,z。到目前为止,这适用于常规文件。

比较原子博客:在 Docker 中使用 Volumes 会导致 SELinux 出现问题

z标志不足以允许连接到 X unix 套接字。

目前找到的解决方法:

  • 使用 docker run option 禁用特定容器的 SELinux 限制--security-opt label=disable。优点:这很简单,效果很好,而且我不需要更改主机上的 SELinux 策略。反对:针对这一容器的 SELinux 保护完全被禁用。(到目前为止,最好的解决方案)
  • 设置 docker run 选项--ipc=host。优点:简单,有效,SELinux 保持启用状态,无需更改策略。反对:禁用 IPC 命名空间,从而引发另一个安全问题并减少容器隔离。
  • 使用建议的ausearch -c 'xfce4-about' --raw | audit2allow -M my-xfce4about. 下面引用了创建的模块。亲:它有效。反对:所有容器都可以永远访问所有 X unix 套接字,我必须更改 SELinux …

fedora selinux socket volume docker

7
推荐指数
1
解决办法
2522
查看次数

启动 docker 服务时出错:未找到单元

我正在使用 Redhat 7.4,这台机器没有互联网连接,我想安装 Docker,因此我下载了一个 rpm 包,这个:

docker-ce-selinux-17.03.0.ce-1.el7.centos.noarch.rpm

我使用了该命令yum install,显然所有过程都进行得很顺利,但是当我使用时我的问题就开始了,sudo systemctl start docker我得到了这个:

无法启动 docker.service:未找到单元。

我尝试了本主题中的解决方案:Cannot start docker daemon in CentOS7 | Stack Overflow和我的问题没有解决,我在文档 docker.socket 中写了这个

[Unit]
Description=Docker Socket for the API
PartOf=docker.service

[Socket]
ListenStream=/var/run/docker.sock
SocketMode=0660
SocketUser=root
SocketGroup=docker

[Install]
WantedBy=sockets.target
Run Code Online (Sandbox Code Playgroud)

使用该命令时,sudo systemctl start docker.socket它会抛出:

docker.socket 的作业失败。有关详细信息,请参阅“systemctl status docker.socket”和“journalctl -xe”。

然后我使用了这个命令sudo systemctl status docker.socket并得到了这个

docker.socket - Docker Socket for the API
Loaded: loaded (/usr/lib/systemd/system/docker.socket; disabled; vendor 
preset: disabled)
Active: inactive (dead)
Listen: …
Run Code Online (Sandbox Code Playgroud)

rhel socket docker

7
推荐指数
1
解决办法
4万
查看次数

如何在服务停止时关闭 systemd 套接字?

我目前正在尝试使用两个 Fifo 套接字创建一个 systemd 服务。这些套接字映射到应用程序的标准输出和标准输入。我当前正在使用以下配置文件。

foo.service

[Unit]
Description=foo Fifo test
After=network.target foo-in.socket foo-out.socket
Requires=foo-in.socket foo-out.socket

[Service]
Sockets=foo-out.socket
Sockets=foo-in.socket
StandardOutput=fd:foo-out.socket
StandardInput=fd:foo-in.socket
StandardError=journal
ExecStart=/path/to/foo/exec
Run Code Online (Sandbox Code Playgroud)

foo-out.socket

[Unit]
Description=foo Task Writes to this

[Socket]
Service=foo.service
ListenFIFO=%t/foo/out
Run Code Online (Sandbox Code Playgroud)

foo-in.socket

[Unit]
Description=foo Task reads commands from this

[Socket]
Service=foo.service
ListenFIFO=/run/user/1000/foo/in
Run Code Online (Sandbox Code Playgroud)

systemctl --user daemon-reload我可以使用命令和启动服务systemctl --user start foo。当我尝试停止 foo.service 时,问题就出现了。我收到这条消息:

Warning: Stopping foo.service, but it can still be activated by:
  foo-in.socket
  foo-out.socket
Run Code Online (Sandbox Code Playgroud)

有没有办法在服务停止时自动停止套接字?

systemd services socket fifo socket-activation

7
推荐指数
1
解决办法
4813
查看次数