㈠ 在linux下,python怎么才能抓到网卡上的所有TCP数据包
Ethereal 自带许多协议的 decoder,简单,易用,基于winpcap的一个开源的软件.但是它的架构并不灵活,如何你要加入一个自己定义的的解码器,得去修改 Ethereal的代码,再重新编译,很烦琐.对于一般的明文 协议,没有什么问题,但是对于加密协议,比如网络游戏,客户端程序一般会在刚连接上的时候,发送一个随机密钥,而后的报文都会用这个密钥进行加密,如此. 要想破解,得要有一个可编程的抓包器.
libpcap是一个不错的选择,但是对于抓包这样需要反复进行”试 验->修改”这个过程的操作,c 语言显然不是明智的选择.
Python提供了几个libpcapbind。在windows平台上,你需要先安装winpcap,如果你已经安装了Ethereal非常好用
一个规范的抓包过程
import pcap
import dpkt
pc=pcap.pcap() #注,参数可为网卡名,如eth0
pc.setfilter('tcp port 80') #设置监听过滤器
for ptime,pdata in pc: #ptime为收到时间,pdata为收到数据
print ptime,pdata #...
对抓到的以太网V2数据包(raw packet)进行解包
p=dpkt.ethernet.Ethernet(pdata)
if p.data.__class__.__name__=='IP':
ip='%d.%d.%d.%d'%tuple(map(ord,list(p.data.dst)))
if p.data.data.__class__.__name__=='TCP':
if data.dport==80:
print p.data.data.data # by gashero
一些显示参数
nrecv,ndrop,nifdrop=pc.stats()
返回的元组中,第一个参数为接收到的数据包,(by gashero)第二个参数为被核心丢弃的数据包。
㈡ Linux下如何抓指定IP的包
用tcpm命令可以抓指定IP的包,具体命令为:
tcpmp tcp -i eth1 -t -s 0 -c 100 and dst port 22 and src net 192.168.1.1 -w ./target.cap
参数解析:
tcp: ip icmp arp rarp 和 tcp、udp、icmp这些选项等都要放到第一个参数的位置,用来过滤数据报的类型。
-i eth1 : 只抓经过接口eth1的包
-t : 不显示时间戳
-s 0 : 抓取数据包时默认抓取长度为68字节。加上-S 0 后可以抓到完整的数据包
-c 100 : 只抓取100个数据包
dst port 22 : 抓取目标端口是22的数据包
src net 192.168.1.0/24 : 数据包的源网络地址为192.168.1.1
-w ./target.cap : 保存成cap文件,方便用ethereal(即wireshark)分析
(2)linux数据包抓取扩展阅读
tcpmp语法格式:
tcpmp [-adeflnNOpqStvx][-c<数据包数目>][-dd][-ddd][-F<表达文件>][-i<网络界面>][-r<数据包文件>][-s<数据包大小>][-tt][-T<数据包类型>][-vv][-w<数据包文件>][输出数据栏位]
tcpmp主要参数说明:
1、-a 尝试将网络和广播地址转换成名称。
2、-c<数据包数目> 收到指定的数据包数目后,就停止进行倾倒操作。
3、-d 把编译过的数据包编码转换成可阅读的格式,并倾倒到标准输出。
4、-dd 把编译过的数据包编码转换成C语言的格式,并倾倒到标准输出。
5、-ddd 把编译过的数据包编码转换成十进制数字的格式,并倾倒到标准输出。
6、-e 在每列倾倒资料上显示连接层级的文件头。
7、-f 用数字显示网际网络地址。
8、-F<表达文件> 指定内含表达方式的文件。
9、-i<网络界面> 使用指定的网络截面送出数据包。
10、-l 使用标准输出列的缓冲区。
11、-n 不把主机的网络地址转换成名字。
12、-N 不列出域名。
㈢ 如何在linux下编写抓包程序
无论是在
linux
系统下,还是在
windows
系统下,使用
tcpflow
或者
wireshark
抓取数据包,基本思路都是一样的。即:根据你需要抓取的数据包,设定特定的过滤规则,以及在哪一个网络适配器上进行抓包。最后将抓取的数据包保存到一个文件中,供以后的分析使用。
㈣ linux火狐浏览器怎么抓包
火狐是没有抓包工具,可以使用linux中tcpmp 进行抓包。。 firefox按F12进可以看到访问网页详细信息。
㈤ linux系统下如何查看数据包
可以用 tcpmp 命令来抓包,比如
tcpmp-ieth0
其中,eth0就是你要抓包的网口。或者你可以用
tcpmp-ieth0-ne
其中 -ne 表示显示不要省略MAC地址。
也可以抓包到文件,例如
tcpmp-ieth0-wtest.pcap
把抓下来的包保存到test.pcap文件中,可以用Wireshark打开来查看,慢慢分析包中的数据。
㈥ 如何在linux上抓包tcpflow
无论是在
Linux
系统下,还是在
WINDOWS
系统下,使用
tcpflow
或者
wireshark
抓取数据包,基本思路都是一样的。即:根据你需要抓取的数据包,设定特定的过滤规则,以及在哪一个网络适配器上进行抓包。最后将抓取的数据包保存到一个文件中,供以后的分析使用。
展开全部
㈦ linux怎么抓tcpmp的数据包
linux下有命令可直接执行抓包的,命令如下:1、tcpmp -vv -i ethN -s 10240 -w /root/abc.cap host ip
2、上述命令中,ethN,是你要抓的本机网卡,一般是eth0,可使用ifconfig查看使用的哪个网卡
-s 指定的是抓包数量 -w指定的是抓到的包写到哪个位置 host ip即为抓取哪个ip 的包
㈧ 如何抓取路由器数据包 linux
为了使IOL实例间的数据包能被我们捕获,可以使用程序changL2.py和py2net.py两个程序:
changL2.py作用是把标准输入中的pcap文件输出流中的第21-24字节的linktype
改为指定的协议如:ETH、HDLC、PPP、FR、或者你可以手动指定DLT(DataLinkType)类型,随后判断每个包的长度,然后重新输出到标准输出。
㈨ linux下怎么抓nat的数据包
1. 配置IP地址
1.1 正确配置学校分配的IP使能正常上网
1) 按学校分配的IP地址配置好Linux主机
[~]# cat /etc/sysconfig/network-scripts/ifcfg-eth0
| DEVICE=eth0 |
| BOOTPROTO=none |
| HWADDR=00:1E:90:13:E0:25 |
| IPADDR=10.3.10.19 |
| NETMASK=255.255.255.0 |
| GATEWAY=10.3.10.254 |
| ONBOOT=yes |
| TYPE=Ethernet |
| DNS1=211.64.120.2 |
| DEFROUTE=yes |
| DOMAIN=168.96.1.1 |
2) 重起网卡
[~]# servie network restart
note: 经过以上的配置, Linux主机应该能够正常上网了!
1.2 新增eth0别名设备eth0:0
[~]# cat /etc/sysconfig/network-scripts/ifcfg-eth0:0
| # eth0:0 必须要用''括起来: 'eth0:0' |
| DEVICE='eth0:0' |
| ONBOOT=yes |
| BOOTPROTO=static |
| IPADDR=192.168.50.1 |
| NETMASK=255.255.255.0 |
| USERCTL=no |
1.3 配置后 查看一下是否配置成功:
[~]# ifconfig
| eth0 Link encap:Ethernet HWaddr 00:1E:90:13:E0:25 |
| inet addr:10.3.10.19 Bcast:10.3.10.255 Mask:255.255.255.0 |
| inet6 addr: fe80::21e:90ff:fe13:e025/64 Scope:Link |
| UP BROADCAST RUNNING PROMISC MULTICAST MTU:1500 Metric:1 |
| RX packets:187685 errors:0 dropped:0 overruns:0 frame:0 |
| TX packets:137327 errors:0 dropped:0 overruns:0 carrier:0 |
| collisions:0 txqueuelen:1000 |
| RX bytes:134816893 (128.5 MiB) TX bytes:56066393 (53.4 MiB) |
| Interrupt:27 Base address:0xa000 |
| eth0:0 Link encap:Ethernet HWaddr 00:1E:90:13:E0:25 |
| inet addr:192.168.50.1 Bcast:192.168.50.255 Mask:255.255.255.0 |
| UP BROADCAST RUNNING PROMISC MULTICAST MTU:1500 Metric:1 |
| Interrupt:27 Base address:0xa000 |
2. 配置路由
由于在配置网卡接口时, 已自动配置一定的路由, 所以我们只需查看一下其信息, 验证其
是否已经被正确配置:
[root ~]$ route
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
192.168.50.0 * 255.255.255.0 U 0 0 0 eth0
10.3.10.0 * 255.255.255.0 U 1 0 0 eth0
link-local * 255.255.0.0 U 1002 0 0 eth0
default 10.3.10.254 0.0.0.0 UG 0 0 0 eth0
3. 配置NAT
1) 新建nat.sh脚本文件并保存在 /usr/local/nat/ 目录下:
[~]# cat /usr/local/nat/nat.sh
| #!/bin/bash |
| # 0. 设定你的参数值 |
| EXIF='eth0' # 这个是对外的网卡接口, 可能是'ppp0'等 |
| EXNET='192.168.50.0/24' # 这个是对内的网段 |
| # 底下如无需要, 请不要改动了! |
| # 1. 启动routing等 |
| echo 1 > /proc/sys/net/ipv4/ip_forward |
| /sbin/iptables -F |
| /sbin/iptables -X |
| /sbin/iptables -Z |
| /sbin/iptables -F -t nat |
| /sbin/iptables -X -t nat |
| /sbin/iptables -Z -t nat |
| /sbin/iptables -P INPUT ACCEPT |
| /sbin/iptables -P OUTPUT ACCEPT |
| /sbin/iptables -P FORWARD ACCEPT |
| /sbin/iptables -t nat -P PREROUTING ACCEPT |
| /sbin/iptables -t nat -P POSTROUTING ACCEPT |
| /sbin/iptables -t nat -P OUTPUT ACCEPT |
| # 2. 载入模组 |
| /sbin/modprobe ip_tables 2> /dev/null |
| /sbin/modprobe ip_nat_ftp 2> /dev/null |
| /sbin/modprobe ip_nat_irc 2> /dev/null |
| /sbin/modprobe ip_conntrack 2> /dev/null |
| /sbin/modprobe ip_conntrack_ftp 2> /dev/null |
| /sbin/modprobe ip_conntrack_irc 2> /dev/null |
| # 3. 启动ip伪装 |
| /sbin/iptables -t nat -A POSTROUTING -o $EXIF -s $EXNET -j MASQUERADE |
2) 增加可执行权限
[~]# chmod +x /usr/local/nat/nat.sh
4. 大功告成
1) Linux主机配置完成, 现在只需重新启动一下刚才的配置:
[~]# servie network restart
[~]# /usr/local/nat/nat.sh
2) 为了使得开机即可运行, 可在 /etc/rc.d/rc.local 文件加入相应的命令:
[~]# echo "/usr/local/nat/nat.sh" >> /etc/rc.d/rc.local
5. 配置客户机(可以是windows或linux等其它系统)
1. network 设定需要为: 192.168.50.0
2. broadcast 设定需要为: 192.168.50.255
3. netmask 设定需要为 255.255.255.0
4. IP 设定需要为 192.168.50.1 ~ 192.168.50.254 之一, 且‘不能重复’
5. Gateway 或者要设定为你的 Linux 的对内 IP , 以我的例子来说, 就是
192.168.50.1
6. DNS 的设定: 这个最容易出错了, DNS 设定需要是 ISP 给你的 DNS
IP, 如果不知道的话, 可以填入 168.95.1.1 或者是
139.175.10.20 这一个 SeedNet 的 DNS 即可!千万不要设定为 192.168.1.2
㈩ tcpmp 怎么在linux操作系统上抓包
默认系统里边没有安装有tcpmp的,无法直接使用
这里我们可以使用yum来直接安装它
yum install -y tcpmp
如果忘记了这个的用法,我们可以使用 tcpmp --help 来查看一下使用方法
一般我们的服务器里边只有一个网卡,使用tcpmp可以直接抓取数据包,但是这样查看太麻烦了,所以都会添加参数来进行获取的。
例如我截取本机(192.168.31.147)和主机114.114.114.114之间的数据
tcpmp -n -i eth0 host 192.168.31.147 and 114.114.114.114
还有截取全部进入服务器的数据可以使用以下的格式
tcpmp -n -i eth0 dst 192.168.31.147
或者服务器有多个IP 可以使用参数
tcpmp -n -i eth0 dst 192.168.31.147 or 192.168.31.157
我们抓取全部进入服务器的TCP数据包使用以下的格式,大家可以参考下
tcpmp -n -i eth0 dst 192.168.31.147 or 192.168.31.157 and tcp
从本机出去的数据包
tcpmp -n -i eth0 src 192.168.31.147 or 192.168.31.157
tcpmp -n -i eth0 src 192.168.31.147 or 192.168.31.157 and port ! 22 and tcp
或者可以条件可以是or 和 and 配合使用即可筛选出更好的结果。