之前搞定了ip aggregation的shell script版本,所以就着手在flink上用java实现对pcap文件的处理。然而java好写,遇到的其他问题倒是不少。
- 首先就是pcap4j这个库在mac上的使用,这里是它的Github,貌似是一个日本程序猿写的,README当中并没有写明在macOS中如何使用,只是给出一个链接,是另一位程序猿在macOS上做的测试,也是几年前的事情了。
鼓捣了很久,过程很繁琐,也依然没有安好,这个时候我发现这个Github主页上有一个作者写的关于该项目的网址https://www.pcap4j.org/,点进去发现在mac上使用Maven就可以极其简单的使用这个库。
- 安装homebrew。
- 打开Terminal,安装libpcap库:
brew install libpcap
。 - 安装Maven,在Terminal输入
mvn -version
如果没有相关版本信息,请检查$JAVA_HOME
和$PATH
。 - 在Maven中添加pcap4j的dependencies,随便生成一个quickstart项目,打开根目录的pom.xml文件,加入:
pom.xml
- 愉快的写代码吧!(首次运行
mvn package
时会消耗一定时间下载相应的库。)
- 环境已经搭好,准备找个sample先测试下,这个项目的作者很贴心的提供了一些samples,随便copy了一个,用Maven打包了一个jar文件,
java -jar sample.jar
之后提示无法找到主类错误。我第一反应就是看下MANIFEST.MF文件,果然文件中并没有Main-Class,添上就是咯。信心满满再次打包,结果运行仍然提示找不到主类。研究了一会发现Maven的一个插件可以解决这个问题——maven-assembly-plugin。
只需要在pom.xml文件中加入:
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.5.5</version>
<configuration>
<archive>
<manifest>
<mainClass>MainClassName</mainClass>
</manifest>
</archive>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
</plugin>
</plugins>
</build>
这样就可以正常使用java -jar ***.jar
来运行啦!
- Tips
- Maven的本地库一般位于
~/.m2/repository/
,pcap4j在org的文件夹内。 - pcap4j需要管理员权限。