
众所周知,在Windows下开发运行环境下,在调试网络环境时,可以可以很方便的借助wireshark等软件进行抓包分析;并且在linux或者Ubuntu等桌面版里也可以进行安装抓包工具进行抓包分析,但总有一些情况,无法直接运用工具(比如一些没有界面的linux环境系统中),则此时我们就需要使用到最简单的tcpdump命令进行网络抓包。
一般的,linux下抓包时,抓取特定的网络数据包到当前文件夹下的文件中,再把文件拷贝出来利用Windows下的wireshark软件进行分析。
tcpdump命令详解:(简单举例)
1、抓取到的文件为filename.cap,然后将此文件拷贝到Windows下,使用wireshar打开后,即可对此文件进行分析。
2、eth0 是主机的网络适配器名称,具体的参数值可以在linux命令行窗口中通过 ifconfig 指令查询。
目标:在linux下使用C语言的原始套接字来接收以太网数据链路层上的数据,如果接收的数据是IEC61850-9-2 SV类型,则打印。。。。仅供参考!源代码:#include <stdio.h>#include <unistd.h>#include <sys/socket.h>#include <sys/types.h>#include <linux/if_ether.h>#include <linux/in.h>#define BUFFER_MAX 2048int main(int argc, char *argv[]){ int sock, n_read, eth_type char buffer[BUFFER_MAX]char *eth_headif((sock = socket(PF_PACKET, SOCK_RAW, htons(ETH_P_ALL))) <0){ fprintf(stdout, "create socket error/n")exit(0)}while(1) { n_read = recvfrom(sock, buffer, 2048, 0, NULL, NULL) if(n_read <42) { fprintf(stdout, "Incomplete header, packet corrupt/n") continue } eth_head = buffer eth_type=((unsigned char)eth_head[16])*16*16+(unsigned char)eth_head[17] if(eth_type==0x88ba){//judge wether the eth_type is iec61850 sv printf("\n----------------IEC61850-9-2 SV---------------------\n") int i=0 for(i=0i<n_readi++){ printf("%.2X ",(unsigned char)eth_head[i]) if(((i+1)%16)==0) printf("\n") } printf("\n----------------------------------------------------\n") }}}欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)