我试图从netcat
php 文件启动的连接中获取一个值,但是它终止于:
localhost [127.0.0.1] 2000 (?) : Connection refused
我不知道为什么,但如果我以 Apache 用户 (www-data) 的身份进行 ssh,它就会运行良好。这是我所做的:
启动一个无限循环,稍微延迟一下日期:
$ (while true; do nc -l -p 2000 -c "sleep 5; date"; done)&
检查是否正常工作:
$ su www-data $ nc localhost 2000 Fri Oct 16 21:33:20 COT 2009
创建/var/www/test.php 如下:
<?php exec('nc localhost 2000>>/var/www/dates.txt 2>>/var/www/errors.txt &'); ?>
在浏览器上运行它:
http://myserver.com/test.php
最后查看两个 txt,日期为空(与#2 中的响应不同)并且错误出现“连接被拒绝”错误。
该服务器是一个运行带有 DRBD 和 Heartbeat 的 Ubuntu Server 9.04 的 LAMP 集群。
让我抓狂的是,这个 test.php 在我的笔记本电脑(Ubuntu Desktop 9.04 上的 LAMP)上运行良好,并且服务器似乎已经打开并正在监听端口:
$ netstat -ntpl
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:4743 0.0.0.0:* LISTEN 2326/openhpid
tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN 3364/mysqld
tcp 0 0 0.0.0.0:2000 0.0.0.0:* LISTEN 9510/nc
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 3470/apache2
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 2320/sshd
tcp 0 0 127.0.0.1:3551 0.0.0.0:* LISTEN 2354/apcupsd
tcp6 0 0 :::22 :::* LISTEN 2320/sshd
这是我真正想要存档的内容:图表(我还没有足够的点来插入图片,哈哈)
- 当服务器请求时,将卡车秤的重量值发送到服务器
- 将原始文本(epson 转义文本格式)发送到打印机的串行端口
因此,客户端电脑不断运行两个监听netcat
连接,一个用于获取重量,另一个用于打印原始文本。
答案1
此命令需要端口号和重定向之间有一个空格。
nc localhost 2000 >>/var/www/dates.txt 2>>/var/www/errors.txt
顺便说一句,肯定存在更有效、更安全的方法来实现您的目标。
答案2
好吧,毕竟这是一个权限问题...已修复使用 visudo 编辑 /etc/sudoers 以添加:
www-data ALL = NOPASSWD: /bin/nc
答案3
检查本地接口是否处于up状态。
ip link
应该会告诉你。本地接口可能已关闭,可能性不大,但有可能。
您希望看到类似这样的内容:
1: lo: <LOOPBACK,UP> mtu 16436 qdisc noqueue
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
另外,查看一下 ip route。看看那里是否发生了一些非常奇怪的事情。