使用tcpdump找出PP用户

一般情况下网络硬件和TCP/IP堆栈不支持接收或发送与本计算机无关的数据包,为了接收这些数据包,就必须使用网卡的混杂模式,并绕过标准的TCP/IP堆栈才行。在FreeBSD下,这就需要内核支持伪设备bpfilter。因此,在内核中取消bpfilter支持,就能屏蔽tcpdump之类的网络分析工具
(1). tcpdump的选项介绍

   -a    将网络地址和广播地址转变成名字;
   -d    将匹配信息包的代码以人们能够理解的汇编格式给出;
   -dd    将匹配信息包的代码以c语言程序段的格式给出;
   -ddd   将匹配信息包的代码以十进制的形式给出;
   -e    在输出行打印出数据链路层的头部信息;
   -f    将外部的Internet地址以数字的形式打印出来;
   -l    使标准输出变为缓冲行形式;
   -n    不把网络地址转换成名字;
   -t    在输出的每一行不打印时间戳;
   -v    输出一个稍微详细的信息,例如在ip包中可以包括ttl和服务类型的信息;
   -vv    输出详细的报文信息;
   -c    在收到指定的包的数目后,tcpdump就会停止;
   -F    从指定的文件中读取表达式,忽略其它的表达式;
   -i    指定监听的网络接口;
   -r    从指定的文件中读取包(这些包一般通过-w选项产生);
   -w    直接将包写入文件中,并不分析和打印出来;
   -T    将监听到的包直接解释为指定的类型的报文,常见的类型有rpc (远程过程调用)和snmp(简单网络管理协议;)

(2). tcpdump的表达式介绍

表达式是一个正则表达式,tcpdump利用它作为过滤报文的条件,如果一个报文满足表达式的条件,

则这个报文将会被捕获。如果没有给出任何条件,则网络上所有的信息包将会被截获。在表达式中一般如下几种类型的关键字。

    第一种是关于类型的关键字,主要包括host,net,port, 例如 host 210.27.48.2,指明210.27.48.2是一台主机,net 202.0.0.0 指明 202.0.0.0是一个网络地址,port 23 指明端口号是23。如果没有指定类型,缺省的类型是host.

    第二种是确定传输方向的关键字,主要包括src , dst ,dst or src, dst and src ,这些关键字指明了传输的方向。举例说明,src 10.27.48.2 ,指明ip包中源地址是210.27.48.2 , dst net 202.0.0.0 指明目的网络地址是202.0.0.0 。如果没有指明方向关键字,则缺省是src or dst关键字。

    第三种是协议的关键字,主要包括fddi,ip,arp,rarp,tcp,udp等类型。Fddi指明是在FDDI(分布式光纤数据接口网络)上的特定的网络协议,实际上它是"ether"的别名,fddi和ether具有类似的源地址和目的地址,所以可以将fddi协议包当作ether的包进行处理和分析。其他的几个关键字就是指明了监听的包的协议内容。如果没有指定任何协议,则tcpdump将会监听所有协议的信息包。

    除了这三种类型的关键字之外,其他重要的关键字如下:gateway, broadcast,less,greater,还有三种逻辑运算,取非运算 'not ' '! ', 与运算是'and','&&';或运算 是'or' ,'││';这些关键字可以组合起来构成强大的组合条件来满足人们的需要,下面举几个例子来说明。

A想要截获所有210.27.48.1 的主机收到的和发出的所有的数据包:
#tcpdump host 210.27.48.1

B想要截获主机210.27.48.1 和主机210.27.48.2 或210.27.48.3的通信,使用命令:(在命令行中适用括号时,一定要
#tcpdump host 210.27.48.1 and (210.27.48.2 or 210.27.48.3 )

C如果想要获取主机210.27.48.1除了和主机210.27.48.2之外所有主机通信的ip包,使用命令:
#tcpdump ip host 210.27.48.1 and ! 210.27.48.2

D如果想要获取主机210.27.48.1接收或发出的telnet包,使用如下命令:
#tcpdump tcp port 23 host 210.27.48.1


(3). tcpdump的输出结果介绍

A,数据链路层头信息
使用命令
#tcpdump --e host ice
ice 是一台装有linux的主机,她的MAC地址是0:90:27:58:AF:1A
H219是一台装有SOLARIC的SUN工作站,它的MAC地址是8:0:20:79:5B:46;上一条命令的输出结果如下所示:
21:50:12.847509 eth0 < 8:0:20:79:5b:46 0:90:27:58:af:1a ip 60: h219.33357 > ice.telne
t 0:0(0) ack 22535 win 8760 (DF)

    分析:21:50:12是显示的时间, 847509是ID号,eth0 <表示从网络接口eth0 接受该数据包,eth0 >表示从网络接口设备发送数据包, 8:0:20:79:5b:46是主机H219的MAC地址,它表明是从源地址H219发来的数据包. 0:90:27:58:af:1a是主机ICE的MAC地址,表示该数据包的目的地址是ICE . ip 是表明该数据包是IP数据包,60 是数据包的长度, h219.33357 > ice.telnet 表明该数据包是从主机H219的33357端口发往主机ICE的TELNET(23)端口. ack 22535 表明对序列号是222535的包进行响应. win 8760表明发送窗口的大小是8760.

B,ARP包的TCPDUMP输出信息

使用命令
#tcpdump arp
得到的输出结果是:
22:32:42.802509 eth0 > arp who-has route tell ice (0:90:27:58:af:1a)
22:32:42.802902 eth0 < arp reply route is-at 0:90:27:12:10:66 (0:90:27:58:af:1a)
分析: 22:32:42是时间戳, 802509是ID号, eth0 >表明从主机发出该数据包, arp表明是ARP请求包, who-has route tell ice表明是主机ICE请求主机ROUTE的MAC地址。 0:90:27:58:af:1a是主机ICE的MAC地址。

C,TCP包的输出信息
    用TCPDUMP捕获的TCP包的一般输出信息是:
src > dst: flags data-seqno ack window urgent options
src > dst:表明从源地址到目的地址, flags是TCP包中的标志信息,S 是SYN标志, F (FIN), P (PUSH) , R (RST) "." (没有标记); data-seqno是数据包中的数据的顺序号, ack是下次期望的顺序号, window是接收缓存的窗口大小, urgent表明数据包中是否有紧急指针. Options是选项.

D,UDP包的输出信息

    用TCPDUMP捕获的UDP包的一般输出信息是:
route.port1 > ice.port2: udp lenth
UDP十分简单,上面的输出行表明从主机ROUTE的port1端口发出的一个UDP数据包到主机ICE的port2端口,类型是UDP, 包的长度是lenth


实例 找出内网中使用PP的机器

shell > tcpdump -nn -vv -c 20

12:11:44.636774 219.140.183.152.8094 > 218.22.65.6.20364: [udp sum ok] udp 50 (ttl 63, id 28190, len 78)
12:11:44.637245 218.61.121.80.8094 > 219.140.183.152.8094: [udp sum ok] udp 35 (ttl 112, id 57038, len 63)
12:11:44.638314 219.140.183.152.8094 > 221.136.231.254.60318: udp 58 (ttl 63, id 28191, len 86)
12:11:44.638409 219.140.183.152.8094 > 61.136.86.146.8094: [udp sum ok] udp 34 (ttl 63, id 28192, len 62)
12:11:44.640300 219.140.183.152.1084 > 219.140.22.110.9000: udp 219 (ttl 127, id 6617, len 247)
12:11:44.640422 218.22.65.6.20426 > 219.140.183.152.8094: [udp sum ok] udp 34 (ttl 115, id 21895, len 62)
12:11:44.641942 221.11.113.230.5354 > 219.140.183.152.4692: . 3119087055:3119088483(1428) ack 457192704 win 65391 <nop,nop,timestamp 122655 52684> (DF) (ttl 114, id 64608, len 1480)
12:11:44.642048 61.243.183.147.51023 > 219.140.183.152.8094: udp 1058 (ttl 105, id 62164, len 1086)
12:11:44.642128 219.140.22.110.9000 > 219.140.183.152.1084: udp 147 (ttl 121, id 22960, len 175)
12:11:44.642640 219.140.183.152.4692 > 221.11.113.230.5354: . [tcp sum ok] 1:1(0) ack 4294961536 win 46537 <nop,nop,timestamp 52687 122136,nop,nop,sack sack 3 {4294962952:2808}{9948:10648}{7092:8520} > (DF) (ttl 63, id 28193, len 80)
12:11:44.650168 218.22.65.6.20426 > 219.140.183.152.8094: [udp sum ok] udp 34 (ttl 115, id 21896, len 62)
12:11:44.651346 221.136.231.254.60318 > 219.140.183.152.8094: udp 1058 (ttl 113, id 47202, len 1086)
12:11:44.651584 221.136.231.254.60318 > 219.140.183.152.8094: udp 1058 (ttl 113, id 47203, len 1086)
12:11:44.651875 221.136.231.254.60318 > 219.140.183.152.8094: udp 1058 (ttl 113, id 47204, len 1086)
12:11:44.651967 221.136.231.254.60318 > 219.140.183.152.8094: udp 1058 (ttl 113, id 47205, len 1086)

可以看到有很多本地8094端口出去的包 ,  我们再来看看这包 是从LAN中哪个机器发出来的
shell > grep -o "src=.*port.*8094" /proc/net/ip_conntrack


src=192.168.0.135 dst=61.136.86.146 sport=8094 dport=8094 src=61.136.86.146 dst=219.140.183.152 sport=8094 dport=8094
src=192.168.0.135 dst=221.208.245.66 sport=8094 dport=61644 src=221.208.245.66 dst=219.140.183.152 sport=61644 dport=8094
src=192.168.0.135 dst=222.95.172.238 sport=8094 dport=8094 src=222.95.172.238 dst=219.140.183.152 sport=8094 dport=8094
src=192.168.0.135 dst=61.243.183.147 sport=8094 dport=51023 src=61.243.183.147 dst=219.140.183.152 sport=51023 dport=8094
src=192.168.0.135 dst=60.7.111.61 sport=8094 dport=3040 src=60.7.111.61 dst=219.140.183.152 sport=3040 dport=8094
src=192.168.0.135 dst=218.244.65.69 sport=8094 dport=8094 src=218.244.65.69 dst=219.140.183.152 sport=8094 dport=8094

可以看到在内网中的135机器 在访问PP点点通
统计一下这个机器在/proc/net/ip_conntrack里面一共有多少个连接跟踪 
grep  "src=192.168.0.135" /proc/net/ip_conntrack|wc -l
380

tcpdump -i eth1 src host 192.168.0.135 -vv
12:28:46.387185 192.168.0.135.8094 > 222.170.67.114.8094: udp 1058 (ttl 64, id 47289, len 1086)
12:28:46.387595 192.168.0.135.8094 > 222.170.67.114.8094: udp 1058 (ttl 64, id 47290, len 1086)
12:28:46.387756 192.168.0.135.8094 > 218.244.65.69.8094: udp 1058 (ttl 64, id 47291, len 1086)
12:28:46.387895 192.168.0.135.8094 > 221.227.47.28.8094: udp 1058 (ttl 64, id 47292, len 1086)
12:28:46.388038 192.168.0.135.8094 > 218.244.65.69.8094: udp 1058 (ttl 64, id 47293, len 1086)

根据上面的包来进行匹配

shell > iptables -A FORWARD -s 192.168.0.135 -p udp --sport 8094 -j DROP

 pkts bytes target     prot opt in     out     source               destination
  623  211K DROP       udp  --  *      *       192.168.0.135        0.0.0.0/0           udp spt:8094


立即可以看到600多个包被DROP了

另外我们限制他的TCP 连接也最多只能15个
iptables -A FORWARD -s 192.168.0.135 -p tcp  -m connlimit --connlimit-above 15 -j DROP

附:

PP软件的封锁
阻止对220.175.8.100 的http访问, 即TCP/80port -不能搜索;阻止来源于LAN 的所有IP 对UDP/9090~9099 端囗的所有访问(不能共享其它PP用户的文件);阻止来源于LAN 的所有IP 对udp/8094 端囗的所有访问;阻止来源于LAN 的所有IP对TCP/5354 端囗的所有访问-不能登录PP。

结合time和string来管制BT
BT可透过过滤BT种子进行阻绝,由于BT种子文件名称都为有”.torrent”的字符串,所以我们可以利用这个功能加以过滤。相关的设定为:启动网页字符串管制,新增输入要过滤的关键词”.torrent”即可。时间管制设定全部或到某一时间开始到某一时间失效。可以使用在非工作时间失效, 结合下面的日期, 可以控制在工作天上班时间禁止访问带某些关键词的网页,如果要禁止所有时段,


网络上流量最大的20个端口
 
排名 端口号 服务名称
1 4662 Emule、edonkey
2 16881 BitSpirit
3 80 http
4 8094
5 5354 pp点点通、poco
6 7000 传奇、天骄
7 3077 迅雷
8 2001 联众
9 443 https
10 8000 QQ、中国游戏中心、上海热线游戏频道
11 1007 联众
12 17381
13 22594
14 27005 CS
15 7002 CS1.5
16 27015 CS
17 27016 CS
18 16584
19 10399
20 17130

 



 

你可能感兴趣的:(使用tcpdump找出PP用户)