Sniffer

一、将网卡设置在混杂模式

lonely@bogon:~/code/sniffer$ su
密码:
bogon:/home/lonely/code/sniffer# ifconfig eth0 promisc
bogon:/home/lonely/code/sniffer# ifconfig
eth0      Link encap:Ethernet  HWaddr 00:0c:29:14:31:2c
          inet addr:192.168.26.128  Bcast:192.168.26.255  Mask:255.255.255.0
          inet6 addr: fe80::20c:29ff:fe14:312c/64 Scope:Link
          UP BROADCAST RUNNING PROMISC MULTICAST  MTU:1500  Metric:1
          RX packets:373 errors:0 dropped:0 overruns:0 frame:0
          TX packets:293 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:40867 (39.9 KiB)  TX bytes:41109 (40.1 KiB)
          Interrupt:19 Base address:0x2000

lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:22 errors:0 dropped:0 overruns:0 frame:0
          TX packets:22 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:1981 (1.9 KiB)  TX bytes:1981 (1.9 KiB)

 


lonely@bogon:~/code/sniffer$ cat headers.h

 

ExpandedBlockStart.gif 代码
struct  ip{
        unsigned 
int  ip_length: 4 ;
        unsigned 
int  ip_version: 4 ;
        unsigned 
char  ip_tos;
        unsigned 
short  ip_total_length;
        unsigned 
short  ip_id;
        unsigned 
short  ip_flags;
        unsigned 
char  ip_ttl;
        unsigned 
char  ip_protocol;
        unsigned 
short  ip_cksum;
        unsigned 
int  ip_source;
        unsigned 
int  ip_dest;
};

struct  tcp{
        unsigned 
short  tcp_source_port;
        unsigned 
short  tcp_dest_port;
        unsigned 
int  tcp_seqno;
        unsigned 
int  tcp_ackno;
        unsigned 
int  tcp_resl: 4 ,tcp_hlen: 4 ,tcp_fin: 1 ,tcp_syn: 1 ,tcp_rst: 1 ,tcp_psh: 1 ,tcp_ack: 1 ,tcp_urg: 1 ,tcp_res2: 2 ;
        unsigned 
short  tcp_winsize;
        unsigned 
short  tcp_cksum;
        unsigned 
short  tcp_urgent;
};

 

 


lonely@bogon:~/code/sniffer$ cat simple_tcp_sniff.c

ExpandedBlockStart.gif 代码
/*
 * stdio.h              printf和std_out之类的基本输入输出函数
 * sys/socket.h SOCK_RAW和IPPROT_TCP的定义
 * netinet/in.h 定义 sockaddr_in
 * arpa/inet.h  网络函数
 
*/
#include 
< stdio.h >
#include 
< sys / socket.h >
#include 
< netinet / in .h >
#include 
< arpa / inet.h >

/*  定义ip和tcp字段的结构  */
#include 
" headers.h "

int  main()
{
        
int  sock,bytes_recieved,fromlen;
        
char  buffer[ 65535 ];
        
struct  sockaddr_in from;
        
struct  ip  * ip;
        
struct  tcp  * tcp;

        sock
= socket(AF_INET,SOCK_RAW,IPPROTO_TCP);
        
while ( 1 )
        {
                fromlen
= sizeof  from;
                bytes_recieved
= recvfrom(sock,buffer, sizeof  buffer, 0 ,( struct  sockaddr  * ) & from, & fromlen);
                printf(
" \nBytes received ::: %5d\n " ,bytes_recieved);
                printf(
" Source address ::: %s\n " ,inet_ntoa(from.sin_addr));
                ip
= ( struct  ip  * )buffer;
                printf(
" IP header length ::: %d\n " ,ip -> ip_length);
                printf(
" Protocol ::: %d\n " ,ip -> ip_protocol);
                tcp
= ( struct  tcp  * )(buffer + ( 4 * ip -> ip_length));
                printf(
" Source port ::: %d\n " ,ntohs(tcp -> tcp_source_port));
                printf(
" Dest port ::: %d\n " ,ntohs(tcp -> tcp_dest_port));
        }
}


 

 

转载于:https://www.cnblogs.com/zhangyingda/archive/2010/10/30/1864977.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值