记录到程序的连接


9

除了使用iptables记录传入连接。

有没有办法记录到您没有来源的服务的已建立入站连接(假设该服务本身未记录此类信息)?我想要做的是基于谁的连接来收集一些信息,以告知诸如一天中什么时候使用服务最多,主要用户群在世界上什么地方等信息。

我知道我可以使用netstat它并将其连接到cron脚本,但这可能并不准确,因为该脚本只能运行一分钟。

这是我现在正在想的:

  • 编写一个不断轮询的程序netstat,以查找先前轮询中未出现的已建立连接。但是,由于可能没有新的连接,所以这个想法似乎浪费了CPU时间。
  • 编写一个包装程序,该程序在服务运行的任何端口上接受入站连接,但是那时我不知道如何将该连接传递给真实的服务。

编辑:我突然想到这个问题可能对stackoverflow更好,尽管我不确定。很抱歉,如果这是错误的地方。


为什么要排除使用iptables?我们的应用程序在哪个端口上监听?
user9517

主要是因为我想更好地控制日志记录。理想情况下,只要检测到新连接,我就能够处理所需的日志记录。任何端口。我没有一个唯一的专用应用程序,这就是为什么我不问如何深入记录用户名或类似内容的原因。
Zac 2012年

您只能使用iptables将新的传入连接记录到任何端口。我在几个盒子上做到了。因此,我重复伊恩的一个很好的问题:为什么要排除使用iptables?
MadHatter 2012年

您可以在应用程序之前放置代理吗?只需一个非常简单的请求即可接收,记录请求并将其继续传递。您可以将传入的信号转发给代理,然后由代理转发到原始端口上的应用程序。
约翰·加迪尼尔

Answers:


4

您可以使用iptables记录新连接,从而

iptables -I INPUT -m state --state NEW -j LOG --log-level 1 --log-prefix "New Connection "

这将为新的ssh连接添加一条类似的消息

10月6日10:58:23 centos内核:新连接IN = eth0 OUT = MAC = 00:0c:29:5b:a5:ea:00:0c:29:2d:94:a0:08:00 SRC = 192.168。 1.72 DST = 192.168.254.187 LEN = 52 TOS = 0x00 PREC = 0x00 TTL = 126 ID = 15498 DF PROTO = TCP SPT = 59221 DPT = 22 WINDOW = 8192 RES = 0x00 SYN URGP = 0

或像这样建立新的http连接

10月6日11:03:56 centos内核:新连接IN = eth0 OUT = MAC = 00:0c:29:5b:a5:ea:00:0c:29:d2:2c:38:08:00 SRC = 192.168。 254.188 DST = 192.168.254.187 LEN = 60 TOS = 0x10 PREC = 0x00 TTL = 64 ID = 10345 DF PROTO = TCP SPT = 52488 DPT = 80 WINDOW = 14600 RES = 0x00 SYN URGP = 0

对系统的每个新连接,依此类推。将会记录到系统日志配置为发送kern.warning消息的任何位置。


经过更多环顾四周后,这种方式似乎是我最好的选择。我将其与rsyslog结合起来以记录到一个单独的文件中。非常感谢您的翔实回答伊恩!
Zac 2012年


0

tcpdump或wireshark怎么样?


请再扩大一点答案。也许可以向用户建议tcpdump和wirehark如何使故障排除工作受益。
麦哲伦

tcpdump手册,您可以记录完整的数据包。您还可以使用tcpdump捕获数据包,然后在wirehark中对其进行分析tcpdump -i <interface> -s 65535 -w <some-file>。此外,如果您认为已捕获了足够的数据包,则必须以^ C终止捕获。
冈蒂斯,2012年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.