㈠ 在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 配合使用即可篩選出更好的結果。