`
2277259257
  • 浏览: 518481 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

网卡抓取--1(数据包)

 
阅读更多
抓包前,首先要编写实现了PacketReceiver接口的类,即数据包处理器,由与抓包时,对应某个网络接口的JpcapCaptor对象会阻塞,所以我们将每个网卡上得到的对应的JpcapCaptor对象放到一个独立线程中运行;TestPacketReceiver是个数据包解析器,本例中我们只是简单打印出收到的数据包类型及关键参数,阅读如下代码建议参照jPcap的在线文档(http://netresearch.ics.uci.edu/kfujii/jpcap/doc/javadoc/index.html )

TestPacketReceiver.java代码如下:

 

Java代码  收藏代码
  1. import jpcap.JpcapCaptor;  
  2. import jpcap.NetworkInterface;  
  3. import jpcap.PacketReceiver;  
  4. import jpcap.packet.*;  
  5. /** 
  6.  * 使用jpcap显示网络上的各种数据包 
  7.  * @author www.NetJava.cn  
  8.  */  
  9. public class DispalyNetPacket {  
  10.       
  11.     //程序启动主方法  
  12.    public static void main(String args[]){  
  13.        try{  
  14.             //获取本机上的网络接口对象数组  
  15.      final  NetworkInterface[] devices = JpcapCaptor.getDeviceList();  
  16.         for(int i=0;i<devices.length;i++){  
  17.             NetworkInterface nc=devices[i];  
  18.            //创建某个卡口上的抓取对象,最大为2000个  
  19.         JpcapCaptor jpcap = JpcapCaptor.openDevice(nc, 2000true20);  
  20.         startCapThread(jpcap);  
  21.         System.out.println("开始抓取第"+i+"个卡口上的数据");  
  22.         }  
  23.         }catch(Exception ef){  
  24.             ef.printStackTrace();  
  25.             System.out.println("启动失败:  "+ef);  
  26.         }  
  27.   
  28.    }  
  29.     //将每个Captor放到独立线程中运行  
  30.    public static void startCapThread(final JpcapCaptor jpcap ){  
  31.        JpcapCaptor jp=jpcap;  
  32.        java.lang.Runnable rnner=new Runnable(){  
  33.            public void run(){  
  34.                //使用接包处理器循环抓包  
  35.                jpcap.loopPacket(-1new TestPacketReceiver());  
  36.            }  
  37.        };  
  38.        new Thread(rnner).start();//启动抓包线程  
  39.    }      
  40. }  
  41.   
  42. /** 
  43.  * 抓包监听器,实现PacketReceiver中的方法:打印出数据包说明 
  44.  * @author www.NetJava.cn  
  45.  */  
  46. class TestPacketReceiver  implements PacketReceiver {  
  47.       /** 
  48.        * 实现的接包方法: 
  49.        */  
  50.       public void receivePacket(Packet packet) {  
  51.           //Tcp包,在java Socket中只能得到负载数据  
  52.         if(packet instanceof jpcap.packet.TCPPacket){  
  53.             TCPPacket p=(TCPPacket)packet;  
  54.             String s="TCPPacket:| dst_ip "+p.dst_ip+":"+p.dst_port  
  55.                      +"|src_ip "+p.src_ip+":"+p.src_port  
  56.                      +" |len: "+p.len;  
  57.         System.out.println(s);  
  58.         }  
  59.         //UDP包,开着QQ,你就会看到:它是tcp+udp  
  60.         else if(packet instanceof jpcap.packet.UDPPacket){  
  61.             UDPPacket p=(UDPPacket)packet;  
  62.             String s="UDPPacket:| dst_ip "+p.dst_ip+":"+p.dst_port  
  63.              +"|src_ip "+p.src_ip+":"+p.src_port  
  64.             +" |len: "+p.len;  
  65.            System.out.println(s);  
  66.         }  
  67.         //如果你要在程序中构造一个ping报文,就要构建ICMPPacket包  
  68.        else if(packet instanceof jpcap.packet.ICMPPacket){  
  69.            ICMPPacket p=(ICMPPacket)packet;  
  70.            //ICMP包的路由链  
  71.            String router_ip="";  
  72.            for(int i=0;i<p.router_ip.length;i++){  
  73.                router_ip+=" "+p.router_ip[i].getHostAddress();  
  74.            }  
  75.             String s="@ @ @ ICMPPacket:| router_ip "+router_ip  
  76.              +" |redir_ip: "+p.redir_ip  
  77.              +" |mtu: "+p.mtu  
  78.              +" |length: "+p.len;  
  79.           System.out.println(s);  
  80.         }  
  81.         //是否地址转换协议请求包  
  82.        else if(packet instanceof jpcap.packet.ARPPacket){  
  83.            ARPPacket p=(ARPPacket)packet;  
  84.            //Returns the hardware address (MAC address) of the sender  
  85.            Object  saa=   p.getSenderHardwareAddress();  
  86.            Object  taa=p.getTargetHardwareAddress();  
  87.            String s="* * * ARPPacket:| SenderHardwareAddress "+saa  
  88.              +"|TargetHardwareAddress "+taa  
  89.              +" |len: "+p.len;  
  90.          System.out.println(s);  
  91.               
  92.         }  
  93.     //取得链路层数据头 :如果你想局网抓包或伪造数据包,嘿嘿  
  94.      DatalinkPacket datalink  =packet.datalink;  
  95.      //如果是以太网包  
  96.      if(datalink instanceof jpcap.packet.EthernetPacket){  
  97.          EthernetPacket ep=(EthernetPacket)datalink;  
  98.           String s="  datalink layer packet: "  
  99.               +"|DestinationAddress: "+ep.getDestinationAddress()  
  100.               +"|SourceAddress: "+ep.getSourceAddress();  
  101.           System.out.println(s);  
  102.     }      
  103.   }  
  104.   
  105. }   

 

 

 

 运行这段程序,你机器从网络收所有收发到的数据,就都可以展现在你眼前了!,在我的机器上,摘抄一段输出如下:

datalink layer packet: |DestinationAddress: 01:00:5e:00:00:01|SourceAddress: 00:19:e0:f0:ee:55

  datalink layer packet: |DestinationAddress: 01:00:5e:26:4c:da|SourceAddress: 00:e0:81:03:7c:01TCPPacket:| dst_ip /128.195.10.200:80|src_ip /192.168.1.44:1083 |len: 62  datalink layer packet: |DestinationAddress: 00:19:e0:f0:ee:55|SourceAddress: 00:02:8a:96:d1:ab* * * ARPPacket:| SenderHardwareAddress 00:19:e0:f0:ee:55|TargetHardwareAddress 00:00:00:00:00:00 |len: 60  datalink layer packet: |DestinationAddress: ff:ff:ff:ff:ff:ff|SourceAddress: 00:19:e0:f0:ee:55* * * ARPPacket:| SenderHardwareAddress 00:02:8a:96:d1:ab|TargetHardwareAddress 00:19:e0:f0:ee:55 |len: 42  datalink layer packet: |DestinationAddress: 00:19:e0:f0:ee:55|SourceAddress: 00:02:8a:96:d1:abTCPPacket:| dst_ip /192.168.1.44:1083|src_ip /128.195.10.200:80 |len: 62  datalink layer packet: |DestinationAddress: 00:02:8a:96:d1:ab|SourceAddress: 00:19:e0:f0:ee:55
注意:你可能认为要抓取的数据包应分为发送出去的和接收到的;但对jPcap而言,数据包是从网卡上抓取到的一个packet对象,packet没有收发的概念;如果你要确定这个packet的方向,则可根据其中的属性数据值,如源地址、目标地址确认。如果想深入的研究网络协议就请继续钻研吧,我们的任务可仅仅只是统计网络流量,demo了这么多,赶快实现我们的数据统计模块:
分享到:
评论

相关推荐

    用C++实现网络编程---抓取网络数据包的实现方法

    ### 使用C++实现网络编程——抓取网络数据包的实现方法 #### 概述 本文主要探讨了如何利用C++语言进行网络编程,并具体讲解了抓取网络数据包的方法。通过对C++网络编程原理的学习与实践,我们可以实现对网络数据包...

    不同网卡抓取VLAN报文的设置方法总结

    ### 不同网卡抓取VLAN报文的设置方法总结 #### 一、概述 在进行网络测试与故障排查时,经常会遇到需要抓取带有VLAN Tag的数据包来进行深入分析的情况。然而,默认情况下,大多数PC机上的网卡会自动去除接收到的带...

    抓取网络数据包的实现方法

    《抓取网络数据包的实现方法》 网络数据包抓取是网络安全分析、故障排查以及网络性能监控的重要手段。本文将深入探讨如何实现这一过程,主要涉及嗅探器的设计原理和编程实现,以及数据包的基本结构。 首先,嗅探器...

    关于intel网卡抓取VLAN标签

    标题中的“关于Intel网卡抓取VLAN标签”是指在使用Intel网络适配器时,如何捕获并分析网络数据包中的VLAN(虚拟局域网)标签信息。VLAN标签是用于在网络中划分不同虚拟网络的一种技术,它允许在一个物理网络上创建多...

    .archivetempWireshark抓取网卡协议分析(TCP,UDP,ARP,DNS,DHCP,HTTP超详细版本)_怎样可以抓取到tcp数据包-CSDN博客.mhtml

    .archivetempWireshark抓取网卡协议分析(TCP,UDP,ARP,DNS,DHCP,HTTP超详细版本)_怎样可以抓取到tcp数据包-CSDN博客.mhtml

    用C实现网络编程---抓取网络数据包的实现方法.pdf

    在抓取网络数据包时,嗅探器可以捕捉到所有经过网卡的数据包,这些数据包包括IP头、TCP头等信息头的最原始的数据信息。通过对这些在低层传输的原始信息的分析,可以得到有关网络的一些信息。 文章还给出了数据包的...

    C#抓包,SnifferHttp使用网卡获取Http请求数据,可以用于监控网卡数据包

    在IT领域,网络数据包抓取是网络诊断、性能分析和安全审计的重要工具。C#是一种广泛使用的编程语言,能够创建高效的应用程序,包括网络数据包嗅探器。本篇文章将详细探讨如何利用C#和SnifferHttp库来实现网卡上的...

    C#抓包_数据包抓取实例

    C#抓包程序实例,学习如何抓取数据包、抓取的数据包集合等,并使用了皮肤控件对窗口进行美化处理,初始化窗体皮肤实例,抓包时可以多个网卡同时抓取,循环抓取每个网卡的数据包,为每个网卡IP配置一个抓取实例,产生...

    Winform实现网络数据包抓取软件

    标题中的“Winform实现网络数据包抓取软件”是指利用Windows Forms(Winform)这一.NET框架下的用户界面开发工具,创建了一个能够捕获并解析网络数据包的应用程序。这种软件通常被称为网络嗅探器或数据包分析器,...

    NPcap捕获数据包,pcap-next-ex

    标题 "NPcap捕获数据包,pcap-next-ex" 描述了如何利用NPcap库以及`pcap_next_ex`函数来实现对网络数据包的高效捕获。在IT领域,尤其是网络分析和网络安全中,数据包捕获是至关重要的一个环节,它允许我们观察和分析...

    网卡支持抓取的报文带VLAN 标识

    ### Intel网卡抓取VLAN标签的设置方法 #### 方法一:升级网卡驱动并启用QoS数据标签 Intel部分网卡提供了通过升级驱动程序和启用QoS(Quality of Service)设置来抓取VLAN标签的功能。具体操作如下: 1. **升级...

    esxi 主机抓包操作手册

    - 抓取发送到虚拟机的数据包:`pktcap-uw –switchport &lt;Port ID&gt; -c &lt;packet count&gt; --capture PortOutput -o &lt;output file&gt;` - **参数说明**: - `–switchport`:指定虚拟机网卡的Port ID。 - `-c`:指定捕获...

    抓取的HTTPS数据包(新)

    请求的url:https://blog.qihooyun.cn/ 响应内容:https-test 方便自己以后查看,不必每次都重新抓取一个包了。 Server端设置了keep-alive为65秒。

    抓取数据包

    从网络上抓取数据包 #### 知识点概述: 使用 Jpcap 库可以从网络上捕获数据包,并将其保存到 TXT 文件和数据库中。 #### 实践步骤: 1. **安装 Jpcap 和 WinPcap**:确保已安装 Jpcap 以及为其提供支持的 WinPcap...

    .net Winform 抓取本地网卡HTTP数据

    1. **网络封包捕获**:为了抓取HTTP数据,我们需要使用网络封包捕获库。在.NET中,可以使用开源库如`Pcap.Net`或`Libpcap.Net`,它们封装了libpcap库,用于在各种操作系统上捕获网络流量。这些库提供了API,可以监听...

    IP数据包捕获程序

    1. **数据包捕获基础**:数据包捕获是指在网络层抓取传输的数据单元,通常用于故障排查、安全审计和性能分析。常见的数据包捕获工具有Wireshark和 tcpdump。 2. **IP协议**:IP(Internet Protocol)是互联网协议的...

    VC_实现基于Winpcap的网络数据包捕获与分析

    首先,详细解释了数据包捕获的基本原理,特别是关于网卡的混杂模式的概念。接着,介绍了WinPcap库的组成部分及其提供的功能。最后,给出了使用VC++实现网络数据包捕获的具体步骤和技术要点。通过本文的学习,读者...

    mt7612_抓包网卡驱动/支持omnipeek抓2.4G/5G的无线数据包

    总的来说,这个压缩包提供了用于MT7612芯片无线网卡的驱动程序,尤其适合使用Omnipeek进行无线网络数据包的抓取和分析。对于网络管理员、IT专业人员以及进行无线网络调试的人来说,这是一个非常实用的工具集。用户在...

Global site tag (gtag.js) - Google Analytics