目标:在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") }}}1、Link Layer Discovery Protocol (LLDP) agent daemon
链路层发现协议
2、简单说来,LLDP是一种邻近发现协议。它为以太网网络设备,如交换机、路由器和无线局域网接入点定义了一种标准的方法,使其可以向网络中其他节点公告自身的存在,并保存各个邻近设备的发现信息。例如设备配置和设备识别等详细信息都可以用该协议进行公告。
具体来说,LLDP定义了一个通用公告信息集、一个传输公告的协议和一种用来存储所收到的公告信息的方法。要公告自身信息的设备可以将多条公告信息放在一个局域网数据包内传输,传输的形式为类型长度值(TLV)域。
3、服务器上安装lldp之后可以通过lldp确定服务器所连接交换机端口,并且交换机也可以通过lldp确认端口所连接的服务器。且在服务器交换机连线较复杂时能很快定位服务器及交换机的连接关系!
评论列表(0条)