我需要为我正在工作的嵌入式项目构建一个小尺寸的tcpdump。因为我的嵌入式设备的内存大小是有限的,所以我需要在构建TCPDUMP时去掉它中所有不需要的功能。我的目标是使tcpdump可执行文件的大小小于300KB。在使用了"strip option“并在配置中禁用了包选项之后,我已经达到了750KB。为了实现这一点,我想删除tcpdump的所有协议解码功能。我希望tcpdump不再具有十六进制转储功能。我有一个必须删除的不需要的协议的初始列表。
print-802_11.c
print-802_15_4.c
print-ah.c
print-ahcp.c
print-aodv.c
print-aoe.c
print-ap1394.c
print-atalk.c
print-atm.c
print-babel.c
print-bootp.C
print-bt.c
print-calm-fast.c
print-carp.c
print-cdp.c
print-cfm.c
print-chdlc.c
print-cip.c
print-cnfp.c
print-dccp.c
print-decnet.c
print-dtp.c
print-dvmrp.c
print-eap.c
print-egp.c
print-eigrp.c
print-enc.c
print-esp.c
print-fddi.c
print-forces.c
print-ipx.c
print-isakmp.c
print-isoclns.c
print-juniper.c
print-krb.c
print-lane.c
print-m3ua.c
print-sip.c
print-sl.c
print-sll.c
print-sunatm.c
print-zephyr.c
print-usb.c
print-vjc.c
print-vqp.c
print-timed.c
print-tipc.c
print-token.c我开始从Makefile.in中删除这些函数,并在源代码中手动删除函数调用。但后来我意识到这种方法是不可伸缩的。
有没有更好的方法来做这件事?通过使用配置选项?
我对此还不熟悉。所以请解释一下。
发布于 2016-03-12 10:35:34
有没有更好的方法来做到这一点?通过使用配置选项?
不,没有这样的配置选项。你必须以不可伸缩的方式来做。
发布于 2016-03-12 23:01:29
“我想删除tcpdump的所有协议解码功能。我希望tcpdump不再具有十六进制转储功能。……有没有更好的方法来做到这一点?”
我认为是有的,但采用了一种非常不同的方法。
如果您希望从tcpdump获得的只是:
<代码>F212
BTW……你最好使用 libpcap (这就是tcpdump使用的)从头开始编写你自己的代码。
这应该不超过100-400行C代码,这取决于你想要的选项,你将有一个非常非常小的可执行文件,并且不会比需要libpcap的tcpdump依赖更多。所有的复杂性都在解剖中,一旦你移除所有这些,你所拥有的基本上是...一个pcap循环。
这并不难,在我看来,这比你的方法要少得多,而且也更有趣。
有一个教程可以开始(阅读30-60分钟):
http://www.tcpdump.org/pcap.html
...at本教程结束时,您已经掌握了程序的核心。
你可以在相关的SO标签中找到大量的信息(和提问):
https://stackoverflow.com/tags/libpcap/info
https://stackoverflow.com/tags/pcap/info
...and有大约70个写得很好的手册页,记录了完整的pcap应用程序接口(您最终可能会使用其中的10-20个)。
https://stackoverflow.com/questions/35950724
复制相似问题