当前位置:  技术问答>linux和unix

请问!在linux中可以用socket提取链路层的数据包(也就是非基于IP,UDP和TCP的数据包)吗?

    来源: 互联网  发布时间:2015-07-29

    本文导语:  我想用socket将802.1x的认证数据包提取出来,该数据包是非IP包,是一个以太网链路层上的多播包,我曾经用socket绑定SOCK_RAW和SOCK_PACKET的方式来提取,ARP包可以提取到了,不过802.1x的数据包提取不出来。。用的是下面的...

我想用socket将802.1x的认证数据包提取出来,该数据包是非IP包,是一个以太网链路层上的多播包,我曾经用socket绑定SOCK_RAW和SOCK_PACKET的方式来提取,ARP包可以提取到了,不过802.1x的数据包提取不出来。。用的是下面的函数socket(PF_PACKET,SOCK_RAW,htons("0x30"));socket(AF_INET,SOCK_PACKET,htons("0x30")).

求救,怎么用socket函数提取802.1x数据包啊!


|
有linux的原始套节字可以抓原始的数据包,创建套节子的时候用
sock = socket(AF_INET,SOCK_RAW,IPPROTO_ICMP);
或者你用libpcap,比较方便, 例如:

#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 

/* callback function that is passed to pcap_loop(..) and called each time 
 * a packet is recieved                                                    */
void my_callback(u_char *useless,const struct pcap_pkthdr* pkthdr,const u_char*
        packet)
{
    static int count = 1;
    fprintf(stdout,"%d, ",count);
    if(count == 4)
        fprintf(stdout,"Come on baby sayyy you love me!!! ");
    if(count == 7)
        fprintf(stdout,"Tiiimmmeesss!! ");
    fflush(stdout);
    count++;
}

int main(int argc,char **argv)

    int i;
    char *dev; 
    char errbuf[PCAP_ERRBUF_SIZE];
    pcap_t* descr;
    const u_char *packet;
    struct pcap_pkthdr hdr;     /* pcap.h */
    struct ether_header *eptr;  /* net/ethernet.h */

    if(argc != 2){ fprintf(stdout,"Usage: %s numpacketsn",argv[0]);return 0;}

    /* grab a device to peak into... */
    dev = pcap_lookupdev(errbuf);
    if(dev == NULL)
    { printf("%sn",errbuf); exit(1); }
    /* open device for reading */
    descr = pcap_open_live(dev,BUFSIZ,0,-1,errbuf);
    if(descr == NULL)
    { printf("pcap_open_live(): %sn",errbuf); exit(1); }

    /* allright here we call pcap_loop(..) and pass in our callback function */
    /* int pcap_loop(pcap_t *p, int cnt, pcap_handler callback, u_char *user)*/
    /* If you are wondering what the user argument is all about, so am I!!   */
    pcap_loop(descr,atoi(argv[1]),my_callback,NULL);

    fprintf(stdout,"nDone processing packets... wheew!n");
    return 0;
}
但是你要装上类库:libpcap,高版本的linux有libpcap的rpm包。也可以到网上去找最新的libpcap,好像是8.0把

|
row socket

|
写个内核模块,hook进去,物理层往上的什么都读得出来

    
 
 

您可能感兴趣的文章:

  • 请问Linux数据库编程是否也可以支持通用的SQL语言进行数据库编写.
  • 急,请问数据流是经过zip压缩的,Linux下如何编程,解开压缩的数据流?
  • 请问那里有SYBASE的jbdb 2.0下载;jspsmartupload可以直接将文件上传到数据库,请问如何使用
  • 请问,如果连接一个Mssql的数据库。并操作里面的数据。谢谢了:)
  • 请问谁有Applet连接远程Access数据库并且显示数据库内容的例子!
  • 请教:请问java中存放数据库中的记录,用什么数据结构?(hashtable?vector?还是别的?)
  • 请问:ORACLE中的数据取出来后,需不需要进行一定的转换才能变为C语言的数据类型啊?
  • 请问如何查询数据库(注意:不是数据表)?
  • 散分:Jbuilder6开发数据库应用请问你们都用什么数据库? 免费的数据库有那些?
  • 请问在java钟如何得到数据库中的记录总数,以及如何求数据库中一个字段的和?
  • 现在我要画一个数据流程图,请问怎么画?我没有数据流程图的符号。
  • 请问各位朋友:在JAVA的数据库应用管理系统中,如何不在操作系统忠建立数据源便能连接数据库(如ACCESS、MS SQL 等等
  • 请问什么叫做“数据字典”???
  • 请问,如何在作数据备份的时候,对打包的数据文件自动加密?然后这个密码又如何加密呢?
  • 请问以下操作系统的数据模型怎么查
  • 请问有什么方法直接从网卡取数据??
  • 请问网络连接断开,如何让数据在联网后连续发送?
  • 初学JAVA,请问各位哪本数据结构(JAVA版)比较好?
  • 请问怎样把数据发送到网页?
  • 请问如何设计tcp数据包啊??
  • 请问:作为服务端,怎样知道对方(客户端)已关闭了链路?(前提是不用给对方发数据)
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 请问如何实现提取系统设置的环境变量?谢谢先。
  • 请问有没有办法方便提取某个已知进程所占用的socket号?谢谢
  • 请问:怎么提取标准输出(stdout)的内容到别的地方显示?
  • [求助]请问有没有方法将库文件(.a)中的某一部分提取出来?
  • 请问如何用shell脚本在文件中提取出任意位置的字符串并保存到另外一个文件中。
  • 高分请教:我要从oracle中提取数据,然后再browser中画出来,饼状图或者曲线图,请问如何画?
  • 如果我从一个数据库一个表中提取一个值,然后根据这个值从另一个表中取数据,请问....
  • 请问如何从文本提取多处字符串为另一文件重命名?
  • 请教:我要从oracle中提取数据,然后再browser中画出来,饼状图或者曲线图,请问如何画?
  • 请问:我知道路由器的telnet密码,但忘记了enable 密码,请问如何是好?
  • 请问最新的reahat9.0是基于什么核心的?2.4?2.6?请问那里能下载?
  • 请问:请问哪里有关于linux基本操作命令讲解的资料下载,最好是幻灯片格式的.
  • 请问,我试图用#admintool&图形工具命令来安装sun workshop5.0,为什么进入的却是用户管理界面?请问具体该如何在solaris下安装应用软件
  • 请问在Redhat 9里,我从登录就是图形介面,请问如何在图形介面内进入命令行方式呢,谢谢
  • 请问玩过SOLARIS的高手门,在不正常关机后,就不能启动到windows公用桌面了,只能在命令提示模式下了,请问怎么解决这个问题啊?急~!~!
  • 请问:我在redhat下装了bochs-2.2.1-1.rpm,.装了后,想设置一下,但找不到bochsrc.fda.bxrc,请问这个文件在哪个曰录下啊。
  • 请问:在配置Qt时,很多文档都说在.profile,.login里加东西,但是我好像没有发现有这两个文件上,请问这些文件在哪个目录下啊
  • 请问:在GCC里的C程序里的变量的声明是不是只能在前面,而且相同类型的变量的声明只能放在一起?如果不是,请问怎么样可以解决这个问题.
  • 请问各位大虾,小弟今天开始学jsp了,这学期我们有java课,所以已经下载了jdk(好象是1.2),请问我的98环境怎么配置jsp环境呀?我的jdk可以运行.java程序,别的我就不知道了....谢谢!
  • 主机是WIN2000,我用的是LUNIX,请问是否可以共享上网? 如果可以请问如何设置? 500分答谢,龟儿食言!
  • 请问linux下GUI开发的问题!
  • 请问出现fstab文件丢失该怎么修复呀?
  • 请问这个方法如何调用?
  • 请问一个奇怪的问题!
  • 请问在网页中打开的新窗口,如何让其居中。
  • 请问我该学什么了
  • 请问安装zhcon,cxterm问题
  • 非常急! 请问daemontools 在red hat 9下的安装问题? 在线等待
  • 请问如何在一台单机上装VMware的网络访问问题?


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3