📄 427.htm
字号:
printf("Src Port : %d, Dst Port : %d, Message Length : %d\n", <br>
ntohs(uhdr->source), ntohs(uhdr->dest), ntohs(uhdr->len)); <br>
} <br>
} <br>
void leave(int signo) <br>
{ <br>
ifr_old.ifr_flags &= ~IFF_PROMISC; <br>
if( ioctl(sock_pak, SIOCSIFFLAGS, &ifr_old) < 0 ) <br>
{ <br>
perror("Restore IFF_PROMISC"); <br>
exit(-1); <br>
} <br>
setuid(getuid()); <br>
exit(0); <br>
} <br>
int main(int argc, char *argv[]) <br>
{ <br>
struct ifreq ifr; <br>
struct sockaddr_in sa_from; <br>
struct ethhdr *ehdr; <br>
struct iphdr *ip_hdr; <br>
struct arp_hdr *ahdr; <br>
struct in_addr dst_addr, src_addr; <br>
u_char recvbuf[32*1024]; <br>
char str_hw1[32], str_hw2[32], str_flag[128], str_src[32], str_dst[3 <br>
2]; <br>
2]; <br>
int n, i, sa_len; <br>
if( (sock_pak = socket(PF_PACKET, SOCK_RAW, htons(ETH_P_ALL))) < 0) <br>
{ <br>
perror("Socket"); <br>
exit(-1); <br>
} <br>
strcpy(ifr.ifr_name, "eth0"); <br>
if( ioctl(sock_pak, SIOCGIFFLAGS, &ifr) < 0 ) <br>
{ <br>
perror("Ioctl SIOCGIFFLAGS"); <br>
exit(-1); <br>
} <br>
ifr_old = ifr; <br>
ifr.ifr_flags |= IFF_PROMISC; <br>
if( ioctl(sock_pak, SIOCSIFFLAGS, &ifr) < 0 ) <br>
{ <br>
perror("Ioctl SIOCSIFFLAGS"); <br>
exit(-1); <br>
} <br>
signal(SIGINT, leave); <br>
signal(SIGTERM, leave); <br>
for(i=0; i<80; i++) <br>
printf("+"); <br>
printf("\nSnoopy's nose begins to work now!\n"); <br>
for(i=0; i<80; i++) <br>
printf("+"); <br>
printf("\n\n"); <br>
while(1) <br>
{ <br>
sa_len = sizeof(sa_from); <br>
bzero(&sa_from, sa_len); <br>
if ( (n = recvfrom(sock_pak, recvbuf, sizeof(recvbuf), 0, &s <br>
a_fr <br>
om, &sa_len)) < 0) <br>
perror("Recvfrom"); <br>
recvbuf[n] = 0; <br>
ehdr = (struct ethhdr *)recvbuf; <br>
for(i=0; i<80; i++) <br>
printf("*"); <br>
if( ntohs(ehdr->h_proto) == 0x0800 ) //IP datagram <br>
{ <br>
printf("\nIPv4 datagram from %s to %s\n", hw_addr(eh <br>
dr-> <br>
h_source, str_hw1), <br>
hw_addr(ehdr->h_dest, str_hw2)); <br>
printf("\nIP Header Analysis:\n"); <br>
ip_hdr = (struct iphdr*)(recvbuf + sizeof(struct eth <br>
hdr) <br>
); <br>
printf("Ver : 4, HLen : %d, Type Of Service : %d, To <br>
tal <br>
Length : %d\n", <br>
ip_hdr->ihl, ip_hdr->tos, ntohs(ip_hdr->tot_ <br>
len) <br>
); <br>
printf("Id : %d, %s\n", ntohs(ip_hdr->id), ip_flag(i <br>
p_hd <br>
r->frag_off, str_flag)); <br>
dst_addr.s_addr = ip_hdr->daddr; <br>
src_addr.s_addr = ip_hdr->saddr; <br>
strcpy( str_src, inet_ntoa(src_addr)); <br>
strcpy( str_dst, inet_ntop(AF_INET, &dst_addr, str_f <br>
lag, <br>
sizeof(str_flag))); <br>
printf("Src IP : %s, Dst IP : %s, Protocol : %s\n", <br>
str_src, str_dst, ip_proto(ip_hdr->protocol, <br>
str <br>
_flag)); <br>
switch( ip_hdr->protocol ) <br>
{ <br>
case 1: <br>
dealICMP(recvbuf, n); <br>
break; <br>
case 2: <br>
dealIGMP(recvbuf, n); <br>
break; <br>
case 6: <br>
dealTCP(recvbuf, n); <br>
break; <br>
case 17: <br>
dealUDP(recvbuf, n); <br>
break; <br>
default: <br>
break; <br>
} <br>
} <br>
else if( ntohs(ehdr->h_proto) == 0x0806 ) //ARP datagram <br>
{ <br>
printf("\nARP datagram from %s to %s\n", hw_addr(ehd <br>
r->h <br>
_source, str_hw1), <br>
hw_addr(ehdr->h_dest, str_hw2)); <br>
ahdr = (struct arp_hdr*)recvbuf; <br>
printf("HW type : %d, Proto : %d, HW Addr Len : %d, <br>
Prot <br>
o Addr Len : %d\n", <br>
ntohs(ahdr->hw_type), ntohs(ahdr->proto_type <br>
), <br>
ahdr->hw_addr_len, ahdr->proto_addr_len); <br>
switch( ntohs(ahdr->op) ) <br>
{ <br>
case 1: <br>
printf("Operation : ARP Request\n"); <br>
<br>
break; <br>
case 2: <br>
printf("Operation : ARP Reply\n"); <br>
break; <br>
case 3: <br>
printf("Operation : RARP Request\n") <br>
; <br>
break; <br>
case 4: <br>
printf("Operation : RARP Reply\n"); <br>
break; <br>
default: <br>
printf("Operation : %d\n", ntohs(ahd <br>
r->o <br>
p)); <br>
break; <br>
} <br>
printf("Sender HW : %s, Receiver HW : %s\n", <br>
hw_addr(ahdr->snd_hw_addr, str_hw1), <br>
hw_addr(ahdr->rcv_hw_addr, str_hw2)); <br>
memcpy(&dst_addr, ahdr->rcv_ip_addr, IP_HLEN); <br>
memcpy(&src_addr, ahdr->snd_ip_addr, IP_HLEN); <br>
strcpy( str_src, inet_ntoa(src_addr)); <br>
strcpy( str_dst, inet_ntop(AF_INET, &dst_addr, str_f <br>
lag, <br>
sizeof(str_flag))); <br>
printf("Sender IP : %s, Receiver IP : %s\n", str_src <br>
, st <br>
, st <br>
r_dst); <br>
} <br>
else <br>
{ <br>
printf("\n? datagram from %s to %s type %.4x\n", hw_ <br>
addr <br>
(ehdr->h_source, str_hw1), <br>
hw_addr(ehdr->h_dest, str_hw2), htons(ehdr-> <br>
h_pr <br>
oto)); <br>
} <br>
for(i=0; i<80; i++) <br>
printf("-"); <br>
printf("\n\n"); <br>
} <br>
return 0; <br>
} <br>
Wish your sky be sunny, <br>
Wish your heart be happy, <br>
Wish your body be healthy, <br>
Wish U never be lazy. <br>
:) :> ;) ;> :-) :-> ;-) ;-> <br>
※ 来源:.武汉白云黄鹤站 bbs.whnet.edu.cn.[FROM: 202.106.16.45] <br>
</small><hr>
<p align="center">[<a href="index.htm">回到开始</a>][<a href="317.htm">上一层</a>][<a href="428.htm">下一篇</a>]
<p align="center"><a href="http://cterm.163.net">欢迎访问Cterm主页</a></p>
</table>
</body>
</html>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -