由于最近要做一些没有传输层以及应用层的协议探测程序,所需普通的socket就无法用了,因为这些协议是没有端口的,比如ping,就是用的ip层的icmp,而arp和rarp是在数据链路层上的应用,所以我只能用raw socket。下面用一个实例来解释raw socket的应用。才开始学,蛮肤浅的。
#include <stdio.h>
#include <unistd.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <linux/if_ether.h>
#include <linux/in.h>
#define BUFFER_MAX 1500
#define get_u32(X,O) (*(__u32 *)(X + O))
#define get_u16(X,O) (*(__u16 *)(X + O))
#define get_u8(X,O) (*(__u8 *)(X + O))
int main(int argc, char *argv[])
{
int sock, n_read, proto;
char buffer[BUFFER_MAX];
char ip[1024]={'\0'};
char *ethhead, *iphead, *tcphead,
*udphead, *icmphead, *p;
if((sock = socket(PF_PACKET, SOCK_RAW, htons(ETH_P_IP))) < 0)
{
fprintf(stdout, "create socket error\n");
exit(0);
}
while(1)
{
n_read = recvfrom(sock, buffer, 2048, 0, NULL, NULL);
if(n_read < 42)
{
fprintf(stdout, "Incomplete header, packet corrupt\n");
continue;
}
ethhead = buffer;
p = ethhead;
int n = 0XFF;
iphead=buffer+26;
unsigned long source_ip=get_u32(iphead,0);
if(inet_addr("172.18.4.155")==source_ip)
{
if(get_u8(buffer+23,0)==0x06)
{
printf("tcp package\n");
}
}
}
}
上面这个程序就是打印所有经过我们网卡的,源地址是172.18.4.155 的tcp 包。
从raw socket 接受过来的buffer 的地址是数据链路层的地址,具体我们获取的东西就是通过偏移量来,这个偏移量我们需要查看网络书或者抓个包分析下链路层的数据格式等等。
其实从这个程序来看,我们可以获取所有经过我们网卡的信息,比如QQ的文件传输等。
比如我们的防火墙上加这样一个程序,就可以获取所有通过我们墙的信息,比如封堵qq 等。
当然正式的强不可能是这样些,效率低下。
分享到:
相关推荐
RawSocket是一种低级别的网络编程接口,它允许程序员直接与网络协议栈交互,而不依赖于操作系统提供的高级抽象。在本主题中,“RawSend_RawSocket基于MAC发送_sock_raw_C++_原始Socket发送_”指的是使用C++语言通过...
这个大合集包含的raw socket实例可以帮助初学者快速上手。通过实践这些示例,可以更好地理解如何创建、发送和接收原始数据包,以及如何处理各种网络协议。 总之,raw socket是网络编程中的一个重要工具,它提供了...
标题中的“用RawSocket实现的Sniffer的C++Builder源程序”揭示了这是一个使用C++Builder编程环境,通过Raw Socket技术开发的网络嗅探器(Sniffer)项目。网络嗅探器是一种工具,用于捕获并分析网络上的数据包,这...
总之,“SniffMFC_RAW_sniff”是一个很好的学习网络嗅探和RAW socket编程的实例,通过它,我们可以深入了解网络通信的底层细节,提高对网络安全的理解和应对能力。同时,它的开源特性鼓励我们进行二次开发,定制出更...
在这个案例中,我们看到的是基于Raw Socket实现的UDP通信,这通常用于特殊场景,如网络安全分析、自定义网络协议的实现或对网络性能有高度要求的应用。 首先,让我们了解Raw Socket的基本概念。Raw Socket允许...
此外,使用raw socket进行网络扫描可能会被视为不道德或非法行为,因此在实际应用中应确保遵循所有适用的法规和政策。 总的来说,Python的raw socket功能为开发者提供了强大的网络诊断和安全评估工具,但同时也要求...
在“rawsocket_test”这个文件中,很可能是包含了一个使用原始套接字实现数据包嗅探的示例代码。这个代码可能会演示如何打开套接字,设置选项,接收数据包,并展示如何解析和处理这些数据包。通过阅读和理解这段代码...
在描述中提到的"RawSocket基于MAC地址接收以太网数据帧例子",说明这个项目旨在通过原始套接字接收网络数据,具体到以太网层,即通过MAC地址进行通信。原始套接字允许程序访问网络协议栈的较低层次,从而能够处理...
#### 四、RawSocket编程实例 接下来将详细介绍如何使用C#语言下的RawSocket进行网络封包监视。 ##### 1. IPHeader结构定义 为了处理接收到的数据包,首先需要定义一个结构体`IPHeader`,用于暂存有关网络封包的信息...
在Linux环境下,原始套接字(raw socket)是一种允许程序员访问网络协议栈底层的机制,可以用来构建自定义的网络协议或实现特定网络功能。在这个案例中,我们讨论的是使用原始套接字来实现ARP(地址解析协议)局域网...
linux C下用epoll写的socket服务器实例,自己引用头文件,哈哈!
Socket.IO 是一个实时应用框架,它为开发人员提供了一种简单的方式来实现在Web上进行双向通信,即服务器和客户端可以实时、双向地交换数据。在Java中创建一个Socket.IO客户端,你需要依赖一些特定的库来处理相关的...
在IT领域,原始套接字(Raw Socket)是一种允许程序员访问网络协议栈底层功能的特殊类型套接字。它们提供了一种方式,让开发者能够直接操纵数据包,而不局限于特定的传输层或网络层协议。在给定的“arp.rar_RAW_arp_...
### Linux进程间通信方式之socket使用实例详解 #### 一、引言 在现代操作系统中,进程间的通信(IPC)是实现多进程协同工作的重要手段之一。Linux提供了多种进程间通信的方法,包括信号量、消息队列、共享内存以及...
《基于SOCKET和多线程的应用程序间通信技术的研究》一文深入探讨了在不同程序之间采用SOCKET和多线程技术进行数据通信的方法。本文将详细解析标题和描述中的核心知识点,包括SOCKET和多线程的基本原理,以及它们在...
// 创建Socket实例 Socket mySocket = new Socket( AddressFamily.InterNetwork, // IPv4 SocketType.Stream, // TCP ProtocolType.Tcp // TCP协议 ); ``` #### 四、Socket绑定与监听 在服务器端,Socket需要...
#### 四、Socket编程实例 在实际开发中,可以通过编写一个简单的TCP客户端/服务器程序来理解Socket编程的基本流程。例如,服务器程序可以在特定端口监听客户端的连接请求,客户端程序则可以连接到服务器,并与...
在深入PHP Socket的讲解与实例分析中,首先应当了解套接字(Sockets)的基本概念。Sockets是一种网络通信的端点,可被用于客户端和服务器之间的通信。在PHP中,Socket的编程不是非常普及,但其功能强大,可以让...