以前写的一个sniffer网络监听程序(作为备忘)

网络监听程序 使用图形用户界面 有服务器和客户端,服务器监听客户端的登陆。即:如果A客户端登陆服务器,则服务器界面上的A字母对应的红灯变成绿色 绿灯表示连接,红灯表示断线 提示:socket的监听方法 Client.java package keshe; import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import... 阅读详情

ethproto.h:

#ifndef ETHPROTO_H

#define ETHPROTO_H


#define ARP       0X0806

#define RARP          0X8035

#define IP         0X0800

#define IP_TCP       6

#define IP_UDP      17

#define IP_ICMP      1

#define IP_IGMP      2

#define IP_OSPF           89


typedef unsigned char uint8;

typedef unsigned short int  uint16;

typedef unsigned int uint32;

typedef charint8;

typedef short int int16;

typedefintint32;


typedefstruct _EtherHead 

{ 

uint8   d_mac[6];  //ƒøµƒmac

uint8   s_mac[6];   //‘¥mac

uint16  proto_type; //…œ≤„–≠“È¿‡–Õ              

}EtherHead; 


typedef struct _IpHead 

{     

uint8ver_headlen;  //∞ʱæ+±®Õ∑≥§∂»  

uint8   tos;    //∑˛ŒÒ¿‡–Õ

uint16  total_len;    //◊‹≥§∂»

uint16  ident;    //±Í ∂

uint16  frag_offset; //±Í÷æ+∆¨∆´“∆   

uint8   ttl;    //…˙¥Ê÷‹∆⁄

uint8   proto;    //–≠“È¿‡–Õ

uint16  checksum;    //Õ∑≤ø–£—È

uint32  s_ip;    //‘¥ip

uint32  d_ip;     //ƒøµƒip

}IpHead; 


typedef struct _ArpHead

{

uint16 hard_type;//”≤º˛¿‡–Õ

uint16 proto_type;//–≠“È¿‡–Õ

uint8  hard_len;//”≤º˛µÿ÷∑≥§∂»

uint8  proto_len;//–≠“ȵÿ÷∑≥§∂»

uint16 action;//≤Ÿ◊˜¿‡–Õ

uint8  s_mac[6];//‘¥macµÿ÷∑

uint32 s_ip;//‘¥ip

uint8  d_mac[6];//ƒøµƒmacµÿ÷∑

uint32 d_ip;//ƒøµƒip

}ArpHead;


typedef struct _TcpHead 

{     

uint16  s_port; //‘¥∂Àø⁄   

uint16  d_port; //ƒøµƒ∂Àø⁄   

uint32  seq;    //–Ú∫≈

uint32  ack;    //»∑»œ∫≈

uint16offset_flag; //Õ∑≤ø≥§∂»+±£¡Ù+±Í÷æ        

uint16  win; //¥∞ø⁄¥Û–°   

uint16  check_sum;    //–£—È∫Õ

uint16  urp_pointer;//ΩÙº±÷∏’Î

uint32  option;//—°œÓ+ÃÓ≥‰    ˝æ› «16Œªµƒ±∂ ˝

}TcpHead; 


typedef struct _UdpHead 

{ 

uint16s_port;//‘¥∂Àø⁄

uint16  d_port;  //ƒøµƒ∂Àø⁄ 

uint16  len;  //◊‹≥§∂»

uint16  check_sum;  //–£—È∫Õ

}UdpHead; 


char *get_eth_next(char*);

char *get_ip_next(char*);

void ethhead_do(char*);

void arphead_do(char*);

void rarphead_do(char*);

void iphead_do(char*);

void icmphead_do(char*);

void igmphead_do(char*);

void tcphead_do(char*);

void udphead_do(char*);


#endif






ethproto.c:

#include <stdio.h>

#include <stdlib.h>

#include <unistd.h>

#include <sys/types.h>

#include <errno.h>

#include "ethproto.h"


char *get_eth_next(char *ethhead)

{

char *ret;

ret = ethhead +14;

return ret;

}


char *get_ip_next(char *ethhead)

{

char *ret;

ret = ethhead +34;

return ret;

}


void ethhead_do(char *ethhead)

{

char *p=ethhead;

printf("SMAC: %02X:%02X:%02X:%02X:%02X:%02X ==> DMAC: %02X:%02X:%02X:%02X:%02X:%02X\n",

p[6]&0XFF, p[7]&0XFF, p[8]&0XFF, p[9]&0XFF, p[10]&0XFF, p[11]&0XFF,/*‘¥MACµÿ÷∑*/

p[0]&0XFF, p[1]&0XFF, p[2]&0XFF,p[3]&0XFF, p[4]&0XFF, p[5]&0XFF);/*ƒø±ÍMACµÿ÷∑*/

return;

}


void arphead_do(char *arphead)

{

char *p=arphead+14;

printf("arp\n");

printf("SIP: %d.%d.%d.%d ==> DIP: %d.%d.%d.%d\n",

   p[0]&0XFF, p[1]&0XFF, p[2]&0XFF, p[3]&0XFF,/*‘¥IP*/

   p[10]&0XFF, p[11]&0XFF, p[12]&0XFF, p[13]&0XFF);/*ƒøµƒIP*/

return;

}


void rarphead_do(char *rarphead)

{

char *p=rarphead+14;

printf("rarp\n");

printf("SIP: %3d.%3d.%3d.%3d ==> DIP: %3d.%3d.%3d.%3d\n",

   p[0]&0XFF, p[1]&0XFF, p[2]&0XFF, p[3]&0XFF,/*‘¥IP*/

   p[10]&0XFF, p[11]&0XFF, p[12]&0XFF, p[13]&0XFF);/*ƒøµƒIP*/

return;

}


void iphead_do(char *iphead)

{

char *p=iphead+12;

printf("ip\n");

printf("SIP: %3d.%3d.%3d.%3d ==>DIP: %3d.%3d.%3d.%3d\n",

p[0]&0XFF, p[1]&0XFF, p[2]&0XFF, p[3]&0XFF,/*‘¥IP*/

p[4]&0XFF, p[5]&0XFF, p[6]&0XFF, p[7]&0XFF);/*ƒøµƒIP*/

return;

}


void icmphead_do(char *icmphead)

{

printf("icmp\n");

return;

}


void igmphead_do(char *igmphead)

{

printf("igmp\n");

return;

}


void tcphead_do(char *tcphead)

{

char *p=tcphead;

printf("tcp\n");

printf("SPORT: %5d ==> DPORT: %5d\n",

ntohs(((u_int16_t *)p)[0]), /*‘¥∂Àø⁄*/

ntohs(((u_int16_t *)p)[1]));/*ƒøµƒ∂Àø⁄*/

return;

}


void udphead_do(char *udphead)

{

char *p=udphead;

printf("udp\n");

printf("SPORT: %5d ==> DPORT: %5d\n",

ntohs(((u_int16_t *)p)[0]),/*‘¥∂Àø⁄*/

ntohs(((u_int16_t *)p)[1]));/*ƒøµƒ∂Àø⁄*/

return;

}






main.c:

#include <stdio.h>

#include <stdlib.h>

#include <unistd.h>

#include <sys/socket.h>

#include <linux/if_ether.h>

#include <sys/types.h>

#include <netinet/in.h>

#include <time.h>

#include <errno.h>

#include "ethproto.h"


#define BUFFER_MAX 2048


void ether_packet_do(char* buffer)

{

staticint n_packet=0;

int proto;

char *ethhead,*headpoint;

time_t timep;

ethhead = buffer;

n_packet+=1;

time(&timep);

printf("\n[PACKETS]:%d\n",n_packet);

printf("[TIME]:%s",ctime(&timep));

ethhead_do(ethhead);


/*“‘ôկ…œ≤„–≠“È¿‡–Õ*/

proto = ntohs(((u_int16_t *)(ethhead +12))[0]);

switch(proto)

{

case IP:

headpoint = get_eth_next(ethhead);

iphead_do(headpoint);


/*IP…œ≤„–≠“È*/

proto = (int)(*(headpoint +9));

switch(proto)

{

case IP_TCP:

headpoint = get_ip_next(ethhead);

tcphead_do(headpoint);

break;

case IP_UDP:

headpoint = get_ip_next(ethhead);

udphead_do(headpoint);

break;

case IP_ICMP:

headpoint = get_ip_next(ethhead);

icmphead_do(headpoint);

break;

case IP_IGMP:

headpoint = get_ip_next(ethhead);

igmphead_do(headpoint);

break;

case IP_OSPF:printf("ospf\n");break;

default:printf("only know this is a IP packet\n");

}

break;

case ARP:

headpoint = get_eth_next(ethhead);

arphead_do(headpoint);

break;

case RARP:

headpoint = get_eth_next(ethhead);

rarphead_do(headpoint);

break;

default:printf("unknow protocol\n");

}

return;

}



int main(int argc,char *argv[])

{

int sock,n_read;

char buffer[BUFFER_MAX];

if((sock = socket(PF_PACKET,SOCK_RAW,htons(ETH_P_ALL))) <0)

{

perror("socket error!\n");

exit(1);

}


while(1)

{

n_read = recvfrom(sock,buffer,BUFFER_MAX,0,NULL,NULL);

if(n_read <14)

{

perror("this is not ethernet\n");

continue;

}

ether_packet_do(buffer);

}

}


网络侦听程序 一个网络侦听程序,利用该程序可以动态进行网络监听和管理。 立即下载

相关推荐

一个牛人总结的sniffer抓包分析教程

一个牛人总结的160多页sniffer抓包分析教程

局域网监听设计与开发

摘 要 网络监听软件是提供给网络安全管理人员进行安全管理的工具,可以用来监视网络的状态、数据流动情况以及网络上传输的信息,以获取有用信息。作为黑客来说,通过网络监听可以获取其所需信息(比如密码等);对黑客活动和其他网络犯罪进行侦察、取证时,可以使用网络监听技术来获取必要的信息。因此,在目前研究和使用网络监听技术及相关工具,对于防护网络安全、打击网络犯罪具有重要的现实意义。 本局域网监听软件主要利用Winpcap和Jpcap等工具进行开发,使用Java语言在Eclipse 3.2环境下进行开发。软件主

qq_61141142的博客 1235

网络安全 实验1网路监听工具sniffer

Sniffer(嗅探器)是利用计算机的网络接口截获发往其他计算机的数据报文的一种技术。它工作在网络的低层,把网络传输的全部数据记录下来。它可以帮助网络管理员查找网络漏洞和检测网络性能。分析网络的流量,以便找出所关心的网络中潜在的问题。 不同的传输介质网络的可监听性是不同的。

7 款超好用的网络监控工具

7 款超好用的网络监控工具

分享Python知识 1275

基于SIP协议的抓包工具

设计一个专用的SIP协议抓包工具,能截获网络中流过的SIP数据包,并且根据数据包的特征画出SIP通信的流程图。

sentinel滑动时间窗口算法学习

滑动时间窗口 先不说sentinel的算法实现,先说什么是滑动时间窗口, 我们在进行限流的时候,比如通过QPS进行限流,那假如我们以秒为单位,举个例子: 我设置了限流规则,qps是10 如果不使用滑动窗口算法,在统计qps的时候,就有可能会有问题,比如: 在0 - 500ms中的请求数是0,但是在500ms - 1000 ms的请求数是10;在1000ms - 1500ms 之间又进来了5个请求,此时只判断了1000ms - 2000 ms之间的请求数 因为没有把1S进行拆分多个窗口,所以在1000ms之后

小小少年的博客 3980

信息安全技术—实验四:Ip包监视程序实现

一、实验目的及要求学生在熟悉网络数据通信原理以及TCP/IP协议结构原理的基础上,运用套接字编程实现的网络封包监视技术,有效地探测在网络上传输的数据包信息,通过对这些信息的分析利用是有助于网络安全维护的。要求: 1.熟悉网络数据通信原理以及TCP/IP协议结构原理。2.掌握Ip包发送和接收过程。3.在所学知识的基础上自己确定实验方案,画出流程图,独立编程,实现网络监听程序。4.对获取的数据包进行简单分析。二、实验内容将网卡的工作模式设置为混合模式。获取局域网内的某台(多台)主机的MAC地址,捕获到所有经过

天上下雨地上滑,自己跌倒你自己爬 2344

基于NXP1778的CAN自动波特率检测

一、概念 NXP1778芯片内部自带一个CAN控制器。CAN模块由两部分组成:控制器和验收滤波器。所有的寄存器和RAM都以32位字宽度来访问。 CAN自动波特率检测主要用于以一种CAN的转换的产品中。产品中CAN部分的波特率以前都是通过网页中修改然后配置下去的,依据实际情况的考虑,如果CAN部分的波特率能够根据客户设备的改变而自动改变,将会增加其灵活性。   二、原理 根据CAN控制器的

菜鸟的痕迹专栏 5273

10 款免费的网络监控工具

互联网的飞速发展,互联网的使用越来越普遍,网络和互联网不仅成为企业内部的沟通桥梁,也是企业和外部进行各类业务往来的重要管道。 网络监控软件定义:指针对局域网内的计算机进行监视和控制,针对内部的电脑上互联网活动(上网监控)以及非上网相关的内部行为与资产等过程管理(内网监控;所以包含了上网监控(上网行为监视和控制、上网行为安全审计)和内网监控(内网行为监视、控制、软硬件资产管理、数据与信息安全),有...

weixin_30301449的博客 2547

手把手教你用AI工具快速开发UniApp首页:从设计稿到完整页面的实战流程

本文详细介绍了如何利用Claude Code、Cursor等AI工具高效开发UniApp首页的完整工作流。从设计稿解析、Prompt工程、代码生成优化到调试适配,提供了一套可复用的实战流程,帮助前端开发者大幅提升从设计到代码的转化效率。

weixin_29199873的博客 317

告别虚拟机!在WSL2的Ubuntu里5分钟跑通LVGL v9.2图形界面(附SDL2配置避坑)

本文详细介绍了如何在WSL2的Ubuntu子系统中快速配置LVGL v9.2图形库的SDL2模拟环境,帮助嵌入式开发者在5分钟内跑通第一个图形界面示例。通过WSL2和VSCode的远程开发插件,实现Windows系统下无缝使用Linux工具链,大幅提升开发效率。

weixin_28736335的博客 425

java sniffer_用Java来实现的Sniffer

【摘要】没有办法, 不得不做啊, 还得靠这个东西混学分呢。老师给的例子是用VC写的, 说心里话, 俺对VC不感兴趣, 所以就想用Java来实现。但是java是无法直接访问raw socket的, 所以如果要实现sniffer的功能的话, 只能通过jni调用本地的接口, 实际上还是要用VC来写。 不过从网上搜了搜, 发现已经有前人做过了,所以俺就省事儿了, 直接拿过来用吧。看到有两个地方介绍的, 一...

weixin_36290287的博客 650

从ADS到Origin:高效绘制负载牵引Smith圆图的完整指南

本文提供了一份从ADS导出负载牵引数据并在Origin中绘制专业Smith圆图的完整指南。详细介绍了数据导出、导入、关键的数据解释步骤,以及高效处理多组曲线的技巧,帮助射频工程师快速生成用于报告和论文的出版级图表。

tgb3456789的博客 1137

java毕业设计——基于java+Winpcap的局域网监听软件设计与实现(毕业论文+程序源码)——局域网监听软件

网络监听软件是提供给网络安全管理人员进行安全管理的工具,可以用来监视网络的状态、数据流动情况网络上传输的信息,以获取有用信息。作为黑客来说,通过网络监听可以获取其所需信息(比如密码等);对黑客活动和其他网络犯罪进行侦察、取证时,可以使用网络监听技术来获取必要的信息。因此,在目前研究和使用网络监听技术及相关工具,对于防护网络安全、打击网络犯罪具有重要的现实意义。本局域网监听软件主要利用Winpcap和Jpcap等工具进行开发,使用Java语言在Eclipse 3.2环境下进行开发。

m0_66238867的博客 1727

简单的图书管理系统---SpringBoot+mysql通过前后端分离实现增删查改

SpringBoot+mysql通过前后端分离实现增删查改 上篇文章介绍了如何写后端接口 SpringBoot连接MySQL获取数据写后端接口 这篇文章,我们就介绍一下怎么写前端 点击修改跳出修改界面,点击添加书籍跳出添加书籍界面 点击删除,直接删除一行数据 其他的也没什么解释了,直接上代码(看不懂的可以私聊我哟) <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>

爱笑的博客 2015

【AI】使用Cursor和AI编程生成的VUE前端框架

本项目是一个基于VUE.js的前端框架,结合了登录、图形验证码、权限校验等常用功能模块。通过与Cursor AI交互生成的代码,展示了AI在编程中的潜力与效率。

清欢渡的博客 9862

网络监听--Sniffer

Sniffer(嗅探器)就是利用计算机的网络接口截获目的地为其他计算机的数据报文的一种技术。该技术被广泛应用于网络维护和管理方面,它工作的时候就像一部被动声纳,默默的接收着来自网络的各种信息,通过对这些数据的分析,网络管理员可以深入了解网络当前的运行状况,以便找出所关心的网络中潜在的问题。 Sniffer技术简介数据在网络上是以很小的称为“帧”(又称:包)的单位传输的,帧由多个部分组成,不

xjlstudy的专栏 2153

virtuoso如何导出def?

在DEF Out界面,填写def name,library name以及cell name ,cell view既layout,把Output "Floating Shapes" into SPECIAL NETS Section勾上,OK即可。2)在要导出的layout界面选中PAD和prBoundary(shift+左键),快捷键C copy到空cell里,这时需要调整copy过来的object坐标,让两边prBoundary的坐标相同。我正在「拾陆楼」和朋友们讨论有趣的话题,你⼀起来吧?

m0_61544122的博客 2307

编写自己的sniffer(一)

接上篇linux下libpcap抓包分析 一、系统环境 1、系统及类库要求: 类Unix系统+libpcap库+libnet库+pcre库; 2、各组件版本要求: libpcap 1.0以上; libnet 1.1以上; pcre 7.5以上; 注意:对于不同类Unix系统及相同类型不同发行版的Unix系统,libpcap安装组件可能...

weixin_30699831的博客 356

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

Linux下sniffer的编写(新手上路)

Sniffer程序是把NIC(网络适配卡,一般如以太网卡)置为一种叫promiscuous杂乱模式的状态,一旦网卡设置为这种模式,它就能是 sniffer程序能接受传输在网络上的每一个信息包。普通的情况下,网卡只接受和自己的地址有关的信息包,即传输到本地主机的信息包。要使 sniffer能接受处理这种方式的信息,网卡就必须设置为我们刚开始将的杂乱模式,所以需要Root用户来运行这种sniffer程

IT老兵 5427

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

linux环境下的网络监听程序

在网络中监听数据包并将数据包存储在文件中。 首先编译程序gcc p.c -o p  运行程序 sudo ./p 50     (其中50可以替换为其他数据)。 #include #include #include #include #include #include #include #include #include #include "string.

wjs1033的专栏 1123

安卓APP在运行时对全局进行网络状态监听的实现

一.前言 怎么对APP进行全局的网络监听呢?仿照微信的无网状态下弹出的提示,应该怎么做? 我是通过广播的方式通知是否有网络的,那么又如何实现全局监听呢?BaseaActivity,没错,就是它。我们在BaseaActivity使用EventBus订阅事件,具体的可以看一下代码。 先来看看效果吧。 1.真机测试 2.模拟器测试 二.实现方法 1.新建一个项目 2.增加NetUtils类 package com.example.app; import android.content.Context; im

一粒程序米 1377

C语言+二维数组+非递归实现五子棋游戏(工程完成度:100%)

标准C+二维数组+非递归实现五子棋游戏

Zwarwolf的专栏 8961

关于二维数组和指针与传参

假设有一个二维数组a[M][N],要把它作为参数传给一个函数sub()

Zwarwolf的专栏 7414
上一篇: 关于一个有3个线程的线程池相关操作(用作备忘)
下一篇: 关于一个oc写的命令行版的通讯录程序(代码贴过来无缩进,作为备忘,代码完成度:90%)
Zwarwolf
博客等级 码龄20年 693粉丝 123原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Zwarwolf

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值