为何我的tcpdump在linux下运行不了?
tcpdump是通过libpcap来抓取报文的,libpcap在不同平台有不同的实现,下面仅以Linux平台来作说明。首先Linux平台在用户态获取报文的Mac地址等链路层信息并不是什么特殊的事情,通过AF_PACK套接字就可以实现,而tcpdump或libpcap也正是用这种方式抓取报文的(可以strace tcpdump的系统调用来验证)。关于AF_PACK的细节,可查看man 7 packet。其次,上面已经提到tcpdumap使用的是AF_PACK套接字,不是Netfilter。使用Netfilter至少有2点不合理的地方:
1. 数据包进入Netfilter时其实已经在协议栈做过一些处理了,数据包可能已经发生一些改变了。比较明显的一个例子,进入Netfilter前需要重组分片,所以Netfilter中无法抓取到原始的报文分片。而在发送方向,报文离开Netfilter时也未完全结束协议栈的处理,所以抓取到的报文也会有不完整的可能。
2. 在Netfilter抓取的报文,向用户态递送时也会较为复杂。Netfilter的代码处在中断上下文和进程上下文两种运行环境,无法使用传统系统调用,简单的做法就是使用Netlink。而这还不如直接用AF_PACKET抓取报文来得简单(对内核和用户态程序都是如此)。
tcpdump是否要安装?
Tcpdump是一种常用的命令行网络抓包工具,可以用来监视网络上的通讯流量。它可以捕获指定类型的数据包,并对其进行分析和解码。在一些Linux发行版中,Tcpdump通常作为标准的软件包被默认安装。如果你需要使用tcpdump来监视网络流量,那么你可能需要安装它。
你可以通过执行“tcpdump”命令来检查是否已经安装了Tcpdump。如果系统中还没有安装Tcpdump,你可以到“”下载最新的Tcpdump源码包进行安装。需要注意的是,tcpdump的运行需要pcap的支持,所以最好先行安装pcap软件包。
总的来说,如果你需要使用tcpdump工具,那么需要安装它。
想写一个Linux下的拨号上网客户端,该如何开始?
首先先会用Wireshark。
用的过程中不懂什么就学什么,不管是网络知识还是通信协议,然后你就懂了。
然后该使用什么编程方法的话,可以参考一下libpcap,其他的再慢慢看。linux系统主要以命令操作运行 但操作不方便 但保密性高并且设计性强 要想用linux写东西必须熟练掌握其使用规则 简单就是要先回用 在考虑去写 我只懂这些 毕竟linux不是什么公司都会用的 服务范围小但都是需要保密协议性公司才使用或者使用其他操作系统 不能好好学习使用 就不要设计编写

