如何在linux下编写抓包程序

如何在linux下编写抓包程序,第1张

无论是在

linux

系统下,还是在

windows

系统下,使用

tcpflow

或者

wireshark

抓取数据包,基本思路都是一样的。即:根据你需要抓取的数据包,设定特定的过滤规则,以及在哪一个网络适配器上进行抓包。最后将抓取的数据包保存到一个文件中,供以后的分析使用。

WPE抓包发包的用法:

打开wpe程序,然后执行游戏。

2进入游戏后再按[Alt+Tab]跳出游戏。

3到wpe的窗口,这时你点选"SELECT GAME"里面,会有一大串的东西。选最下面的那个,就是你正在玩的那个游戏。 (他上面所显示的字并不是窗口名字,不同于普通修改器,所以别因为找不到名字就以为程序坏了)

4再进入游戏,找个要测试的目标。

5 接下来按下停止键,你会看到wpe中有着一堆数字,前面还有"R"或"S",其中的"R"就是receive。也就是你从远程主机接收到的讯息,这个部分并不是我们所要注意的。因为资料是存在远程主机的,所以我们传(也就是"S"-Sent)什么过去远程主机才是最重要的,这时候拿出你的纸笔,把那Sent的信息都抄下来。

WPE简介:

WPE(Winsock Packet Editor),它的中文名称是网络封包编辑器。在大多数的编程工具中winsock已经封装成一个控件,成为网络编程的控件,是非常方便的,利用这个控件,编程工具就可以编写外挂工具。

Wpe工作原理和可行性分析 :Client/server模式网络游戏,我们的信息全在服务器上面,想从服务器上修改我们的个人用户信息可,能性为微乎其微,客户端安装在你的机器上,玩游戏的时候,你发出指令,其实就是向服务器发送封包,服务器接收到封包后进行分析,然后返回结果,结果也是以封包的形式发送到你的机器上,你的机器接收到後就可以看到结果了。Wpe所要改的,不是游戏里面的数值,而是伪造信息封包。就是我们用Wpe所要改的,并不是"生命力由100变成10000"之类的东西, 这种东西无法用Wpe改, 我们要改的可能是把"我卖了一个500元的东西" 改成"我卖了一个50000元的东西"或把"我得了10的exp"改成"我得了10000的exp"之类的,或者是明明身上没东西还一直卖"500元的东西"或没怪物还"一直打10的exp"。

也就是说WPE可以截取网络上的信息,拿封包分析,改里面的值。如果是坏人用到的话,后果不可想像。更可怕的是用它来截取网络密码等一些信息。

一、实验内容描述

本实验是用java实现的网络抓包程序,在windows环境下安装winpcap40和jpcap60后,下载eclipse和jigloo插件(一种在eclipse底下作图形化开发的工具),将其安装好,然后就可以进行java的网络抓包图形化开发了。

二、原理与关键技术

网络抓包技术原理

网络层上有各种各样的数据包,它们以不同的帧格式在网络层上进行传输,但是在传输时它们都遵循相同的格式,即有相同的长度,如果一种协议的帧格式达不到这种长度,就让其补齐,以达到我们的要求。

网络抓包关键技术

无论是在windows *** 作系统下还是在linux *** 作系统下,要想捕获网络上的数据包,必须要对网卡进行控制,因为本机的数据报从网络上来到本机是通过网卡然后再保存到本地缓冲区上的,所以要抓获网包就必须调用网卡驱动中的对外函数,在linux系统中有neth文件,可以调用neth文件中的函数来 *** 作网卡,可以直接编程实现,但为了更方便的使用,可以安装一个叫libpcap的软件,这样调用函数更好用,而在windows系统中,因为源代码不对外公开,所以要安装一个叫winpcap的软件,这样用C或VC++就可以实现了,但因为我用的是java语言来实现的,所以无论是在哪个系统都要安装一个叫jpcap的软件,它本身就把底层的函数又封装了一下,这样就可以让java来使用了。

三、设计与实现

1基于java的设计方案

我的这个网络抓包程序是图形化 *** 作界面,在菜单栏点击抓包按钮后选择网卡和过滤字还有最长字长,点击开始,然后就可以开始抓包了,在主界面中就会显示出一行又一行的数据,这些数据就是抓获到的数据包。

具体实现

安装winpcap40和jpcap60

2下载eclipse33和jigloo,jigloo是eclipse底下的插件,是用来支持eclipse底下的java 图形化开发的。

3编写java抓包程序:

4建立三个文件,一个主程序,一个抓包程序,一个抓包选项程序对话框程序

5第一个程序:主程序如下

package netcap;

import javaawteventActionEvent;

import javaawteventActionListener;

 

import javaxswingJSeparator;

import javaxswingJMenuItem;

import javaxswingJMenu;

import javaxswingJMenuBar;

 

import javaawt;

import javaawtevent;

import javaxswing;

import javaxswingtable;

import netcap;

import jpcap;

import jpcappacket;

import javautil;

import javasqlTimestamp;

 

/

 This code was edited or generated using CloudGarden's Jigloo

 SWT/Swing GUI Builder, which is free for non-commercial

 use If Jigloo is being used commercially (ie, by a corporation,

 company or business for any purpose whatever) then you

 should purchase a license for each developer using Jigloo

 Please visit 

 Use of Jigloo implies acceptance of these licensing terms

 A COMMERCIAL LICENSE HAS NOT BEEN PURCHASED FOR

 THIS MACHINE, SO JIGLOO OR THIS CODE CANNOT BE USED

 LEGALLY FOR ANY CORPORATE OR COMMERCIAL PURPOSE

/

public class JFrameMain extends javaxswingJFrame implements ActionListener{

 

       private JMenuItem exitMenuItem;

       private JSeparator jSeparator2;

       private JMenuItem saveAsMenuItem;

       private JMenuItem saveMenuItem;

       private JMenuItem stopMenuItem;

       private JMenuItem startMenuItem;

       private JMenu Menu;

       private JMenuBar jMenuBar1;

      

       JTable tabledisplay = null;

       Vector rows,columns;

       DefaultTableModel tabModel;

       JScrollPane scrollPane;

       JLabel statusLabel;

      

       Netcaptor captor = new Netcaptor();

 

       /

        Auto-generated main method to display this JFrame

       /

       public static void main(String[] args) {

              JFrameMain inst = new JFrameMain();

              instsetVisible(true);

       }

      

       public JFrameMain() {

              super();

              initGUI();

       }

      

       private void initGUI() {

              try {

                     setSize(400, 300);

                     {

                            jMenuBar1 = new JMenuBar();

                            setJMenuBar(jMenuBar1);

                            {

                                   Menu = new JMenu();

                                   jMenuBar1add(Menu);

                                   MenusetText("/u6293/u5305");

                                   MenusetPreferredSize(new javaawtDimension(35, 21));

                                   {

                                          startMenuItem = new JMenuItem();

                                          Menuadd(startMenuItem);

                                          startMenuItemsetText("开始");

                                          startMenuItemsetActionCommand("start");

                                          startMenuItemaddActionListener(this);

                                   }

                                   {

                                          stopMenuItem = new JMenuItem();

                                          Menuadd(stopMenuItem);

                                          stopMenuItemsetText("停止");

                                          stopMenuItemsetActionCommand("stop");

                                          stopMenuItemaddActionListener(this);

                                   }

                                   {

                                          saveMenuItem = new JMenuItem();

                                          Menuadd(saveMenuItem);

                                          saveMenuItemsetText("保存");

                                   }

                                   {

                                          saveAsMenuItem = new JMenuItem();

                                          Menuadd(saveAsMenuItem);

                                          saveAsMenuItemsetText("保存为 ");

                                   }

                                   {

                                          jSeparator2 = new JSeparator();

                                          Menuadd(jSeparator2);

                                   }

                                   {

                                          exitMenuItem = new JMenuItem();

                                          Menuadd(exitMenuItem);

                                          exitMenuItemsetText("Exit");

                                          exitMenuItemsetActionCommand("exit");

                                          exitMenuItemaddActionListener(this);

                                   }

                            }

                     }

                    

                     rows=new Vector();

                     columns= new Vector();

                    

                     columnsaddElement("数据报时间");

                     columnsaddElement("源IP地址");

                     columnsaddElement("目的IP地址");

                     columnsaddElement("首部长度");

                     columnsaddElement("数据长度");

                     columnsaddElement("是否分段");

                     columnsaddElement("分段偏移量");

                     columnsaddElement("首部内容");

                     columnsaddElement("数据内容");

 

                    

                     tabModel=new DefaultTableModel();

                     tabModelsetDataVector(rows,columns);

                     tabledisplay = new JTable( tabModel );

                     scrollPane= new JScrollPane(tabledisplay);

                     thisgetContentPane()add( new JScrollPane(tabledisplay),BorderLayoutCENTER);

                    

                     statusLabel=new JLabel("06610班 张琛雨 066100583");

                     thisgetContentPane()add(statusLabel,BorderLayoutSOUTH);

              } catch (Exception e) {

                     eprintStackTrace();

              }

       }

      

       public void actionPerformed(ActionEvent event){

              String cmd=eventgetActionCommand();

             

              if(cmdequals("start")){

                     captorcapturePacketsFromDevice();

                     captorsetJFrame(this);

              }

              else if(cmdequals("stop")){

                     captorstopCapture();

              }

              else if(cmdequals("exit")){

                     Systemexit(0);

              }

       }

 

       public void dealPacket( Packet packet )

       {

              try

              {

                     Vector r=new Vector();

                     String strtmp;

                     Timestamp timestamp = new Timestamp((packetsec  1000) + (packetusec / 1000));

                    

                     raddElement( timestamptoString() ); //数据报时间

                     raddElement(((IPPacket)packet)src_iptoString());    //源IP地址

                     raddElement(((IPPacket)packet)dst_iptoString());    //目的IP地址

                     raddElement( packetheaderlength );   //首部长度

                     raddElement( packetdatalength );             //数据长度

                     raddElement( ((IPPacket)packet)dont_frag == true  "分段" : "不分段" );                          //是否不分段

                     raddElement( ((IPPacket)packet)offset );          //数据长度

      

                     strtmp = "";

                     for(int i=0;i<packetheaderlength;i++){            

                            strtmp += BytetoString(packetheader[i]);

                     }

                     raddElement(strtmp);    //首部内容

      

                     strtmp = "";

                     for(int i=0;i<packetdatalength;i++){         

                            strtmp += BytetoString(packetdata[i]);

                     }

                     raddElement(strtmp);    //数据内容

                                                       

                     rowsaddElement(r);

                     tabledisplayaddNotify();

              }

              catch( Exception e)

              {

                    

              }

       }

}

1、首先安装fiddler,打开fiddlertools、options、genneral,全选。

2、其次打开电脑端小程序退出微信,登录微信时设置代理。

3、然后打开小程序、打开任务管理器,找到小程序进程,打开文件所在位置。

4、最后退出微信,删除\WMPFRuntime下的所有文件,再次登录打开小程序即可。

启动wireshark后,选择工具栏中的快捷键(红色标记的按钮)即可Start a new live capture。 主界面上也有一个interface list(如下图红色标记1),列出了系统中安装的网卡,选择其中一个可以接收数据的的网卡也可以开始抓包。

以上就是关于如何在linux下编写抓包程序全部的内容,包括:如何在linux下编写抓包程序、WPE抓包发包,怎么用、网络抓包,怎么用Java程序登录百度等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zz/9969643.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-03
下一篇 2023-05-03

发表评论

登录后才能评论

评论列表(0条)

保存