rawsocket编程说明和例子Word格式文档下载.docx

上传人:b****1 文档编号:13615324 上传时间:2022-10-12 格式:DOCX 页数:25 大小:29.20KB
下载 相关 举报
rawsocket编程说明和例子Word格式文档下载.docx_第1页
第1页 / 共25页
rawsocket编程说明和例子Word格式文档下载.docx_第2页
第2页 / 共25页
rawsocket编程说明和例子Word格式文档下载.docx_第3页
第3页 / 共25页
rawsocket编程说明和例子Word格式文档下载.docx_第4页
第4页 / 共25页
rawsocket编程说明和例子Word格式文档下载.docx_第5页
第5页 / 共25页
点击查看更多>>
下载资源
资源描述

rawsocket编程说明和例子Word格式文档下载.docx

《rawsocket编程说明和例子Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《rawsocket编程说明和例子Word格式文档下载.docx(25页珍藏版)》请在冰豆网上搜索。

rawsocket编程说明和例子Word格式文档下载.docx

这两句程序你就可以创建一个原始套接字.然而这种类型套接字的功能却与TCP或者UDP类型套接字的功能有很大的不同:

TCP/UDP类型的套接字只能够访问传输层以及传输层以上的数据,因为当IP层把数据传递给传输层时,下层的数据包头已经被丢掉了.而原始套接字却可以访问传输层以下的数据,,所以使用raw套接字你可以实现上至应用层的数据操作,也可以实现下至链路层的数据操作.

比如:

通过

sock=socket(PF_PACKET,SOCK_RAW,htons(ETH_P_IP))

方式创建的rawsocket就能直接读取链路层的数据.

1)使用原始套接字时应该注意的问题(参考<

<

unix网络编程>

>

以及网上的优秀文档)

(1):

对于UDP/TCP产生的IP数据包,内核不将它传递给任何原始套接字,而只是将这些数据交给对应的UDP/TCP数据处理句柄(所以,如果你想要通过原始套接字来访问TCP/UDP或者其它类型的数据,调用socket函数创建原始套接字第三个参数应该指定为htons(ETH_P_IP),也就是通过直接访问数据链路层来实现.(我们后面的密码窃取器就是基于这种类型的).

(2):

对于ICMP和EGP等使用IP数据包承载数据但又在传输层之下的协议类型的IP数据包,内核不管是否已经有注册了的句柄来处理这些数据,都会将这些IP数据包复制一份传递给协议类型匹配的原始套接字.

(3):

对于不能识别协议类型的数据包,内核进行必要的校验,然后会查看是否有类型匹配的原始套接字负责处理这些数据,如果有的话,就会将这些IP数据包复制一份传递给匹配的原始套接字,否则,内核将会丢弃这个IP数据包,并返回一个ICMP主机不可达的消息给源主机.

(4):

如果原始套接字bind绑定了一个地址,核心只将目的地址为本机IP地址的数包传递给原始套接字,如果某个原始套接字没有bind地址,核心就会把收到的所有IP数据包发给这个原始套接字.

(5):

如果原始套接字调用了connect函数,则核心只将源地址为connect连接的IP地址的IP数据包传递给这个原始套接字.

(6):

如果原始套接字没有调用bind和connect函数,则核心会将所有协议匹配的IP数据包传递给这个原始套接字.

2).编程选项

原始套接字是直接使用IP协议的非面向连接的套接字,在这个套接字上可以调用bind和connect函数进行地址绑定.说明如下:

(1)bind函数:

调用bind函数后,发送数据包的源IP地址将是bind函数指定的地址。

如是不调用bind,则内核将以发送接口的主IP地址填充IP头.如果使用setsockopt设置了IP_HDRINCL(headerincluding)选项,就必须手工填充每个要发送的数据包的源IP地址,否则,内核将自动创建IP首部.

(2)connetc函数:

调用connect函数后,就可以使用write和send函数来发送数据包,而且内核将会用这个绑定的地址填充IP数据包的目的IP地址,否则的话,则应使用sendto或sendmsg函数来发送数据包,并且要在函数参数中指定对方的IP地址。

综合以上种种功能和特点,我们可以使用原始套接字来实现很多功能,比如最基本的数据包分析,主机嗅探等.其实也可以使用原始套接字作一个自定义的传输层协议.

1.2一个简单的应用

下面的代码创建一个直接读取链路层数据包的原始套接字,并从中分析出源MAC地址和目的MAC地址,源IP和目的IP,以及对应的传输层协议,如果是TCP/UDP协议的话,打印其目的和源端口.为了方便阅读,程序中避免了使用任何与协议有关的数据结构,如

structether_header,structiphdr 

等,当然,要完全理解代码,你需要关于指针以及位运算的知识

/***************SimpelSniffer.c*************/

//auther:

duanjigang@2006s

#include<

stdio.h>

unistd.h>

sys/socket.h>

sys/types.h>

linux/if_ether.h>

linux/in.h>

#defineBUFFER_MAX2048

intmain(intargc,char*argv[])

{

intsock,n_read,proto;

charbuffer[BUFFER_MAX];

char 

*ethhead,*iphead,*tcphead, 

*udphead,*icmphead,*p;

if((sock=socket(PF_PACKET,SOCK_RAW,htons(ETH_P_IP)))<

0)

{

fprintf(stdout,"

createsocketerror\n"

);

exit(0);

}

while

(1) 

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

/*

14 

6(dest)+6(source)+2(typeorlength)

+

20 

ipheader 

icmp,tcporudpheader

=42

*/

if(n_read<

42) 

fprintf(stdout,"

Incompleteheader,packetcorrupt\n"

continue;

}

ethhead=buffer;

p=ethhead;

intn=0XFF;

printf("

MAC:

%.2X:

%02X:

%02X==>

"

%.2X:

%.2X\n"

p[6]&

n,p[7]&

n,p[8]&

n,p[9]&

n,p[10]&

n,p[11]&

n,

p[0]&

n,p[1]&

n,p[2]&

n,p[3]&

n,p[4]&

n,p[5]&

n);

iphead=ethhead+14;

p=iphead+12;

printf("

IP:

%d.%d.%d.%d=>

%d.%d.%d.%d\n"

p[0]&

0XFF,p[1]&

0XFF,p[2]&

0XFF,p[3]&

0XFF,

p[4]&

0XFF,p[5]&

0XFF,p[6]&

0XFF,p[7]&

0XFF);

proto=(iphead+9)[0];

p=iphead+20;

Protocol:

"

switch(proto)

caseIPPROTO_ICMP:

ICMP\n"

break;

caseIPPROTO_IGMP:

IGMP\n"

caseIPPROTO_IPIP:

IPIP\n"

caseIPPROTO_TCP:

caseIPPROTO_UDP:

%s,"

proto==IPPROTO_TCP?

TCP"

:

UDP"

sourceport:

%u,"

(p[0]<

8)&

0XFF00| 

p[1]&

destport:

%u\n"

(p[2]<

0XFF00|p[3]&

caseIPPROTO_RAW:

RAW\n"

default:

Unkown,pleasequeryininclude/linux/in.h\n"

2FTP密码嗅探器实现

注意:

本部分的实现,采用了系统定义的一些数据结构,如链路层头结构体,网络层头结构体,以及TCP.UDP,ICMP头等结构体,正好对上一个例子是一个补充,同时,在程序中操作起来也更方便一些,当然,你必须知道每个数据结构的意思,与数据包头中的各项是如何对应的,还有,在下面的程序中,我们使用单链表存储收集到的用户名与密码,所以,你应该必须熟悉单链表的操作,如插入节点和删除节点等,最后,你最好能够很熟练的使用FTP命令,这样才能很好的理解本文的代码和要点.(对了,你还得明白校验和是做什么用的,以及它的计算方法)为了方便理解,我在文中添加了一个简单的数据包分层图,如下

=============================================

|

|链路层头 

|IP报文头 

|传输层报文头 

|应用层数据 

|

-==============================================

2

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > PPT模板 > 商务科技

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1