最近我在面试中被问到一个我不能做的问题。有人为此得到了解决方案吗?
Grab all connected IP´s on the Linux machine
check every connected IP if TCP port 1706 is open
if its open > execute command. CURL ‘http:// some address ’
Else do nothing.
program will check this every 60 minits
Plattform Linux Ubuntu Server 12. X64 / x32
C ++中的WAP
谢谢!
答案 0 :(得分:1)
制作一个bash脚本。
LOGIC:
使用netstat -natp
(通过awk
/ sed
过滤它来获取端口,然后grep它)然后使用简单的测试来查看结果是否为空。如果是,请运行curl
。
把它放在一个cron工作中。很简单,真的。
编辑:
netstat
是一个实用程序,它会显示计算机上的所有连接。 netstat -natp
显示了计算机上具有tcp套接字的程序列表。
sed
和awk
用于文本格式设置。您可以使用它们列出特定列。
grep
搜索输入以查找指定的字符串。
bash允许基本逻辑,可用于查看字符串是否为空。
cron
是一个linux进程,用于安排在特定时间运行的命令。
编辑#2:
您可以轮询/proc/net/tcp
,但由于netstat
这样做并且格式化很好,为什么要这么麻烦?
答案 1 :(得分:0)
在Linux中,您在/proc/net
中查找文件并解析该文件。
例如,TCP连接列在/proc/net/tcp
head /proc/net/tcp
将显示类似这样的内容
sl local_address rem_address st tx_queue rx_queue tr tm->when retrnsmt uid timeout inode
0: 00000000:0007 00000000:0000 0A 00000000:00000000 00:00000000 00000000 0 0 38148735 1 0000000000000000 100 0 0 10 -1
1: 00000000:1F48 00000000:0000 0A 00000000:00000000 00:00000000 00000000 116 0 38923158 1 0000000000000000 100 0 0 10 -1
2: 00000000:0CEA 00000000:0000 0A 00000000:00000000 00:00000000 00000000 120 0 12364094 1 0000000000000000 100 0 0 10 -1
3: 0100007F:13AD 00000000:0000 0A 00000000:00000000 00:00000000 00000000 1000 0 26454267 1 0000000000000000 100 0 0 10 -1
4: 0100007F:008F 00000000:0000 0A 00000000:00000000 00:00000000 00000000 0 0 5570 1 0000000000000000 100 0 0 10 -1
5: 00000000:0050 00000000:0000 0A 00000000:00000000 00:00000000 00000000 0 0 27328173 1 0000000000000000 100 0 0 10 -1
6: 0100007F:1913 00000000:0000 0A 00000000:00000000 00:00000000 00000000 116 0 38923868 1 0000000000000000 100 0 0 10 -1
7: 00000000:0016 00000000:0000 0A 00000000:00000000 00:00000000 00000000 0 0 18983193 1 0000000000000000 100 0 0 10 -1
8: 0100007F:0277 00000000:0000 0A 00000000:00000000 00:00000000 00000000 0 0 38681424 1 0000000000000000 100 0 0 10 -1
然后,您可以拆分线条,查找打开的连接并采取相应措施。请查看netstat
的来源了解更多信息。