Raw Socket(原始套接字)实现Sniffer(嗅探)
参考资料:
https://www.xuebuyuan.com/3190946.html
https://blog.csdn.net/zxygww/article/details/52093308
int socketfd = socket(AF_INET,SOCK_RAW,IPPROTO_ICMP);/*在网络层使用的原始套接字*/
int socketfd = socket(PF_PACKET,SOCK_RAW,htons(ETH_P_IP));/*在链路层使用*/
实验下图所示程序能够抓到packet。
#include <stdio.h>
#include <unistd.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <arpa/inet.h>
#include <linux/if_ether.h>
#include <linux/in.h> #define BUFFER_MAX 2048 int main()
{
int sockfd, n_read, proto;
char buff[BUFFER_MAX] = {}; //创建socket
sockfd = socket(PF_PACKET, SOCK_RAW, htons(ETH_P_IP));
if (sockfd < ) {
perror("sock ");
return -;
} while () {
n_read = recvfrom(sockfd, buff, sizeof(buff), , NULL, NULL); if (n_read < ) {
fprintf(stderr, "packet corrupt\n");
continue;
} //报文解析
{
char *p = buff; printf("mac: %02x%02x%02x%02x%02x%02x===>%02x%02x%02x%02x%02x%02x\n",
p[]&0xff, p[]&0xff, p[]&0xff, p[]&0xff, p[]&0xff, p[]&0xff,
p[]&0xff, p[]&0xff, p[]&0xff, p[]&0xff, p[]&0xff, p[]&0xff);
}
} return ;
}
Raw Socket(原始套接字)实现Sniffer(嗅探)的更多相关文章
- Linux Socket 原始套接字编程
对于linux网络编程来说,可以简单的分为标准套接字编程和原始套接字编程,标准套接字主要就是应用层数据的传输,原始套接字则是可以获得不止是应用层的其他层不同协议的数据.与标准套接字相区别的主要是要开发 ...
- 《Python黑帽子:黑客与渗透测试编程之道》 网络:原始套接字和流量嗅探
Windows和Linux上的包嗅探: #!/usr/bin/python import socket import os #监听的主机 host = "10.10.10.160" ...
- 浅谈原始套接字 SOCK_RAW 的内幕及其应用(port scan, packet sniffer, syn flood, icmp flood)
一.SOCK_RAW 内幕 首先在讲SOCK_RAW 之前,先来看创建socket 的函数: int socket(int domain, int type, int protocol); domai ...
- Linux系统编程(37)—— socket编程之原始套接字
原始套接字的特点 原始套接字(SOCK_RAW)可以用来自行组装IP数据包,然后将数据包发送到其他终端.也就是说原始套接字是基于IP数据包的编程(SOCK_PACKET是基于数据链路层的编程).另外, ...
- raw_socket(原始套接字)以及普通socket使用终极总结
一.传输层socket(四层socket,普通socket) 可参考本人以下博客: Windows Socket编程之UDP实现大文件的传输:http://blog.csdn.net/luchen ...
- Python原始套接字编程
在实验中需要自己构造单独的HTTP数据报文,而使用SOCK_STREAM进行发送数据包,需要进行完整的TCP交互. 因此想使用原始套接字进行编程,直接构造数据包,并在IP层进行发送,即采用SOCK_R ...
- Pyhont 网络编程【第一篇】初始Socket网络套接字
一.什么是socket: Socket 别名 “网络套接字”,指网络通信链句柄 其实就是一堆网络信息(ip+端口) 建立起的链接称之为socket,Socket的英文原义是“孔”或“插座”,用来实现不 ...
- UNIX网络编程——原始套接字的魔力【上】
基于原始套接字编程 在开发面向连接的TCP和面向无连接的UDP程序时,我们所关心的核心问题在于数据收发层面,数据的传输特性由TCP或UDP来保证: 也就是说,对于TCP或UDP的程序开发,焦点在Dat ...
- Go中原始套接字的深度实践
1. 介绍 2. 传输层socket 2.1 ICMP 2.2 TCP 2.3 传输层协议 3. 网络层socket 3.1 使用Go库 3.2 系统调用 3.3 网络层协议 4. 总结 4.1 参考 ...
随机推荐
- 转载一篇必须超级好的JVM配置实战
不管是YGC还是Full GC,GC过程中都会对导致程序运行中中断,正确的选择不同的GC策略,调整JVM.GC的参数,可以极大的减少由于GC工作,而导致的程序运行中断方面的问题,进而适当的提高Java ...
- linux 系统 网卡 ethX没有显示IP的处理方式
1 临时方式 ifconfig 设备名 IP 地址 (ifconfig eth0 192.168.1.117) 设置好之后马上生效,不需要重启网卡服务(千万别重启网卡服务,不然刚刚设置的又没有了) ...
- unity中Android环境变量配置
http://www.cnblogs.com/windytrees/p/7533477.html
- MVC004之页面引用命名空间
描述:在控制器中返回了一个ViewData["currUser"] 给view,ViewData["currUser"]为 Greatwall.Hr.Bll.H ...
- android通过命令行安装sdk
在linux下没有界面化的安装sdk方式,所以需要通过下载zip包或命令行安装 一.通过tools下的android安装 1.进入到android工具 cd $ANDROID_HOME/tools ...
- Idea单元测试Junit Generator设置
0. setting--->plugins--->brose repostories-->输入JUnitGenerator V2.0 1.junit generator自动生成测试代 ...
- 分布式监控系统Zabbix-3.0.3-完整安装记录
由于采用sendmail发送邮件,常常会被认为是垃圾邮件被拒,所以不推荐这种方式!这里,针对zabbix报警信息的发送,可以采用下面两种方式中的任意一种:1)利用sendEmail程序来发送报警邮件. ...
- pta l2-2(链表去重)
题目链接:https://pintia.cn/problem-sets/994805046380707840/problems/994805072641245184 题意:给定一个链表,要求删除其中键 ...
- NumPy 从已有的数组创建数组
NumPy 从已有的数组创建数组 本章节我们将学习如何从已有的数组创建数组. numpy.asarray numpy.asarray 类似 numpy.array,但 numpy.asarray 只有 ...
- word 2016 加载 mathtype
1.加载wold: 首先打开word,选择选项-------加载项------管理(A),选择word加载项,点击转到 这儿显示的是我已经添加过的所以显示的有. 2.点击添加,找到你的mathtype ...