我用jflow捕获了netflow数据包。通过运行print example,我可以观察到这种输出。

13.243.146.68.41472 -> 10.100.0.126.13570 285212682 0
0.43.0.0.18 -> 0.199.0.0.4352 8321715 100
53.2.7.225.3571 -> 0.0.1.67.37446 323 5
1.187.0.3.323 -> 6.0.0.10.28807 0 183
0.0.0.0.0 -> 0.0.0.0.3571 0 10
1.1.0.53.0 -> 0.18.17.0.323 889257984 26
0.0.0.0.0 -> 0.0.0.0.0 0 146
192.168.1.1.6775 -> 0.53.0.18.0 754988289 112

这似乎打印在DatagramSocket.receive(DatagramPacket)方法内部。我如何自行打印这些详细信息,例如netflow记录的主机地址,目标地址等。

我也无法弄清楚上面输出的最后两个参数是什么意思。

最佳答案

如果您查看jflow的源代码,那么您将确切地看到它的打印内容。

链接的代码调用:

      System.out.println(f.toShortString());

如果您看一下该方法,即nettrack.net.netflow.Flow::toShortString,您将确切地看到它在做什么:
public String toShortString()
{
  return
    IpAddr.toString(getSrcAddr())+"."+getSrcPort()+" -> "+
    IpAddr.toString(getDstAddr())+"."+getDstPort()+" "+
    getDOctets();
}

继续查看源代码,以了解getDOctets的作用。

https://github.com/aptivate/netgraph/blob/master/jflow-0.3/src/nettrack/net/netflow/Flow.java

关于java - 如何获取Netflow数据包的流记录详细信息,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20988578/

10-10 15:10