## 調試 (也可看[流量分析)](http://cb.vu/unixtoolbox_zh_CN.xhtml#traffic)
## Linux
#?ethtool?eth0??????????????
#?顯示以太網狀態(replaces?mii-diag)
#?ethtool?-s?eth0?speed?100?duplex?full?
#?把網卡?eth0?速度改為?100兆/秒,采用全雙工
#?ethtool?-s?eth0?autoneg?off?
#?禁用自動協商模式
#?ethtool?-p?eth1???????????
#?閃爍網絡接口?LED?燈?-?如果支持的話,非常實用
#?ip?link?show??????????????
#?在?Linux?上顯示所有網絡接口(同?ifconfig?類似)
#?ip?link?set?eth0?up???????
#?使設備激活(或Down掉)。同?"ifconfig?eth0?up"
#?ip?addr?show??????????????
#?在?Linux?上顯示所有?IP?地址(與?ifconfig?類似)
#?ip?neigh?show?????????????
#?與?arp?-a?類似
## 其他系統
#?ifconfig?fxp0?????????????
#?查看?"media"?字段(FreeBSD)
#?arp?-a????????????????????
#?查看路由(或主機)?ARP?條目(所有系統)
#?ping?cb.vu????????????????
#?第一個要試的事情...
#?traceroute?cb.vu??????????
#?列印到目的地的路由路徑
#?ifconfig?fxp0?media?100baseTX?mediaopt?full-duplex?
#?100兆/秒?全雙工(FreeBSD)
#?netstat?-s????????????????
#?對每個網絡協議做系統級分析
另一些命令,雖然不總是默認安裝,但很好找:
#?arping?192.168.16.254?????
#?在網絡層上?Ping
#?tcptraceroute?-f?5?cb.vu??
#?使用?tcp?替換?icmp?來跟蹤,透過防火墻
## 路由
### 列印路由表
#?route?-n??????????????????
#?Linux?或使用?"ip?route"
#?netstat?-rn???????????????
#?Linux,?BSD?和?UNIX#?route?print???????????????
#?Windows
### 添加刪除路由
#### FreeBSD
#?route?add?212.117.0.0/16?192.168.1.1
#?route?delete?212.117.0.0/16
#?route?add?default?192.168.1.1
永久的添加路由可在 /etc/rc.conf 配置文件中設置
static_routes="myroute"
route_myroute="-net?212.117.0.0/16?192.168.1.1"
#### Linux
#?route?add?-net?192.168.20.0?netmask?255.255.255.0?gw?192.168.16.254
#?ip?route?add?192.168.20.0/24?via?192.168.16.254???????
#?等同于上面命令#?route?add?-net?192.168.20.0?netmask?255.255.255.0?dev?eth0
#?route?add?default?gw?192.168.51.254
#?ip?route?add?default?via?192.168.51.254?dev?eth0??????
#?等同于上面命令
#?route?delete?-net?192.168.20.0?netmask?255.255.255.0
#### Solaris
#?route?add?-net?192.168.20.0?-netmask?255.255.255.0?192.168.16.254
#?route?add?default?192.168.51.254?1???????????????????
#?1?=?通過此路由跳數減?1
#?route?change?default?192.168.50.254?1
永久條目配置在?`/etc/defaultrouter`?中。
#### Windows
#?Route?add?192.168.50.0?mask?255.255.255.0?192.168.51.253
#?Route?add?0.0.0.0?mask?0.0.0.0?192.168.51.254
使用?`add -p`?來是路由設置永久有效。
### 配置額外的 IP 地址
### Linux
#?ifconfig?eth0?192.168.50.254?netmask?255.255.255.0???????
#?第一個?IP
#?ifconfig?eth0:0?192.168.51.254?netmask?255.255.255.0?????
#?第二個?IP
#?ip?addr?add?192.168.50.254/24?dev?eth0???????????????????
#?等價命令
#?ip?addr?add?192.168.51.254/24?dev?eth0?label?eth0:1
### FreeBSD
#?ifconfig?fxp0?inet?192.168.50.254/24?????????????????????
#?第一個?IP
#?ifconfig?fxp0?alias?192.168.51.254?netmask?255.255.255.0?
#?第二個?IP
永久條目設置在 /etc/rc.conf 中
ifconfig_fxp0="inet?192.168.50.254??netmask?255.255.255.0"
ifconfig_fxp0_alias0="192.168.51.254?netmask?255.255.255.0"
### Solaris
用?`ifconfig -a`?命令檢查設置
#?ifconfig?hme0?plumb??????????????????????????????????????
#?啟用網卡
#?ifconfig?hme0?192.168.50.254?netmask?255.255.255.0?up????
#?第一個?IP
#?ifconfig?hme0:1?192.168.51.254?netmask?255.255.255.0?up??
#?第二個?IP
## 更改 MAC 地址
通常在你更改之前先停下網絡接口。不要告訴我為什么你想改變 MAC 地址......
#?ifconfig?eth0?down
#?ifconfig?eth0?hw?ether?00:01:02:03:04:05??????
#?Linux
#?ifconfig?fxp0?link?00:01:02:03:04:05??????????
#?FreeBSD
#?ifconfig?hme0?ether?00:01:02:03:04:05?????????
#?Solaris
#?sudo?ifconfig?en0?ether?00:01:02:03:04:05?????
#?Mac?OS?X?Tiger
#?sudo?ifconfig?en0?lladdr?00:01:02:03:04:05????
#?Mac?OS?X?Leopard
對于 Windows 已經有許多工具了。像?[etherchange](http://ntsecurity.nu/toolbox/etherchange/)。或者看看 "Mac Makeup", "smac"。
## 使用中的端口
監聽打開的端口:
#?netstat?-an?|?grep?LISTEN
#?lsof?-i???????????????????????????????????????
#?列出所有因特網連接(Linux)
#?socklist??????????????????????????????????????
#?列出打開的?socket?(Linux)
#?sockstat?-4???????????????????????????????????
#?使用?socket?的應用程序列表(FreeBSD)
#?netstat?-anp?--udp?--tcp?|?grep?LISTEN????????
#?Linux
#?netstat?-tup??????????????????????????????????
#?列出活躍的連接(Linux)
#?netstat?-tupl??????????????????????????????
#?列出系統中正在監聽的端口(Linux)
#?netstat?-ano??????????????????????????????????
#?Windows
## 防火墻
檢查正在運行的防火墻(只是典型配置):
### Linux
#?iptables?-L?-n?-v??????????????????
#?狀態信息Open?the?iptables?firewall
#?iptables?-P?INPUT???????ACCEPT?????
#?打開所有
#?iptables?-P?FORWARD?????ACCEPT
#?iptables?-P?OUTPUT??????ACCEPT
#?iptables?-Z????????????????????????
#?把所有鏈的包及字節的計數器清空
#?iptables?-F????????????????????????
#?清空所有鏈
#?iptables?-X????????????????????????
#?刪除所有鏈
### FreeBSD
#?ipfw?show??????????????????????????
#?狀態信息
#?ipfw?list?65535?
#?如果顯示?"65535?deny?ip?from?any?to?any",那防火墻已被禁用
#?sysctl?net.inet.ip.fw.enable=0?????
#?禁用#?sysctl?net.inet.ip.fw.enable=1?????
#?啟用
### 路由 IP 轉發
### Linux
查看然后啟用 IP 轉發:
#?cat?/proc/sys/net/ipv4/ip_forward?????
#?查看?IP?轉發?0=禁用,?1=啟用
#?echo?1?>?/proc/sys/net/ipv4/ip_forward
或者編輯 /etc/sysctl.conf:
net.ipv4.ip_forward?=?1
### FreeBSD
查看并啟用:
#?sysctl?net.inet.ip.forwarding??????????
#?查看?IP?轉發?0=禁用,?1=啟用
#?sysctl?net.inet.ip.forwarding=1
#?sysctl?net.inet.ip.fastforwarding=1 ?
#?專用路由器或防火墻Permanent?with?entry?in?/etc/rc.conf:
gateway_enable="YES"?????????????????????
#?如果主機是網關則設置為?YES。
### Solaris
#?ndd?-set?/dev/ip?ip_forwarding?1???????
#?查看?IP?轉發?0=禁用,?1=啟用
### NAT - 網絡地址轉換
### Linux
#?iptables?-t?nat?-A?POSTROUTING?-o?eth0?-j?MASQUERADE
#?激活?NAT#?iptables?-t?nat?-A?PREROUTING?-p?tcp?-d?78.31.70.238?--dport?20022?-j?DNAT?\
--to?192.168.16.44:22???????????
#?轉發端口?20022?到內部?IP?端口(ssh)#?iptables?-t?nat?-A?PREROUTING?-p?tcp?-d?78.31.70.238?--dport?993:995?-j?DNAT?\
--to?192.168.16.254:993:995?????
#?轉發?993-995?范圍端口
#?ip?route?flush?cache
#?iptables?-L?-t?nat????????????
#?查看?NAT?狀態信息
使用 -D 替換 -A 來刪除端口轉發。
### FreeBSD
#?natd?-s?-m?-u?-dynamic?-f?/etc/natd.conf?-n?fxp0
Or?edit?/etc/rc.conf?with:
firewall_enable="YES"???????????
#?設置?YES?來啟用防火墻功能firewall_type="open"????????????
#?防火墻類型(看?/etc/rc.firewall)natd_enable="YES"???????????????
#?啟用?natd?(如果?firewall_enable?==?YES)。natd_interface="tun0"???????????
#?公共的網絡接口或要使用的?IP?地址。natd_flags="-s?-m?-u?-dynamic?-f?/etc/natd.conf"
端口轉發:
#?cat?/etc/natd.conf?
same_ports?yes
use_sockets?yes
unregistered_only
#?redirect_port?tcp?insideIP:2300-2399?3300-3399??
#?端口范圍redirect_port?udp?192.168.51.103:7777?7777
### DNS
在 unix 上,對于所有的網絡接口的 DNS 條目都存儲在 /etc/resolv.conf 文件中。主機域也儲存在這個文件中。最小化配置如下:
nameserver?78.31.70.238
search?sleepyowl.net?intern.lab
domain?sleepyowl.net
檢查系統域名:
#?hostname?-d????????????????????????
#?等同于?dnsdomainname
### Windows
在 Windows 上,DNS 配置于每個網絡接口。要顯示配置的 DNS 和清空 DNS 緩存可是使用:
#?ipconfig?/?????????????????????????
#?顯示幫助
#?ipconfig?/all??????????????????????
#?顯示所有信息包括?DNS
#?ipconfig?/flushdns?????????????????
#?清除?DNS?緩存
### 轉發查詢
Dig 是你測試 DNS 設置的好朋友。舉個例子,用于測試的 DNS 服務器為?`213.133.105.2 ns.second-ns.de`。查看哪個服務器客戶端接收應答(簡單應答).
#?dig?sleepyowl.net
sleepyowl.net.??????????600?????IN??????A???????78.31.70.238
;;?SERVER:?192.168.51.254
#53(192.168.51.254)
路由器 192.168.51.254 應答了,并返回了一條 A 條目(記錄)。任何條目都可查詢,DNS 服務器可用 @ 來選定:
#?dig?MX?google.com
#?dig?@127.0.0.1?NS?sun.com??????????
#?測試本地服務器#?dig?@204.97.212.10?NS?MX?heise.de??
#?查詢外部#?dig?AXFR?@ns1.xname.org?cb.vu??????
#?查看區傳送(zone?transfer)
程式 host 也很強大。
#?host?-t?MX?cb.vu???????????????????
#?獲取郵件?MX?記錄#?host?-t?NS?-T?sun.com??????????????
#?通過?TCP?連接獲取?NS?記錄#?host?-a?sleepyowl.net??????????????
#?獲取所有
### 反向查詢
查找屬于一個 IP 地址(in-addr.arpa.)的域名。可用?`dig`,?`host`?和?`nslookup`?命令查詢:
#?dig?-x?78.31.70.238
#?host?78.31.70.238
#?nslookup?78.31.70.238
### /etc/hosts
單個主機可以配置于文件 /etc/hosts 來代替本地正在運行的?`named`?反向域名查詢。格式很簡單,舉個例子:
78.31.70.238???sleepyowl.net???sleepyowl
對于 hosts 文件和 DNS 查詢之間的優先級,可在?`/etc/nsswitch.conf`?和?`/etc/host.conf`?中配置 order 名稱解析。這個文件同樣存在于 Windows 上,通常在:
C:\WINDOWS\SYSTEM32\DRIVERS\ETC
### DHCP
### Linux
一些發行版(SuSE)使用 dhcpcd 作為客戶端。默認網絡接口是 eth0。
#?dhcpcd?-n?eth0???????????
#?觸發更新(并不總是可以工作)
#?dhcpcd?-k?eth0???????????
#?釋放并關閉
租約(lease)的全部信息存儲在:
/var/lib/dhcpcd/dhcpcd-eth0.info
### FreeBSD
FreeBSD (和 Debian) 使用?`dhclient`。要配置一個網絡接口(如:bge0)運行:
#?dhclient?bge0
租約(lease)的全部信息存儲在:
/var/db/dhclient.leases.bge0
使用
/etc/dhclient.conf
設置 prepend 選項或強制不同的選項:
#?cat?/etc/dhclient.conf
interface?"rl0"?{
????prepend?domain-name-servers?127.0.0.1;
????default?domain-name?"sleepyowl.net";
????supersede?domain-name?"sleepyowl.net";
}
### Windows
dhcp 租約(lease)使用?`ipconfig`?來更新:
#?ipconfig?/renew??????????
#?更新所有適配器#?ipconfig?/renew?LAN??????
#?更新名叫?"LAN"?的適配器#?ipconfig?/release?WLAN???
#?釋放名叫?"WLAN"?的適配器
是的,這是一個使用簡單名稱重新命名你的適配器的好主意!
### 通信量分析(Traffic analysis)
[Bmon](http://people.suug.ch/~tgr/bmon/)?是一個小的流量監控控制臺,而且可以顯示不同的網絡接口的流量。
### 用 tcpdump 嗅探(sniff)
#?tcpdump?-nl?-i?bge0?not?port?ssh?and?src?\(192.168.16.121?or?192.168.16.54\)
#?tcpdump?-l?>?dump?&&?tail?-f?dump???????????????
#?緩沖輸出#?tcpdump?-i?rl0?-w?traffic.rl0???????????????????
#?把數據報文寫入二進制文件
#?tcpdump?-r?traffic.rl0??????????????????????????
#?從文件讀取數據報文(也可以使用?ethereal)
#?tcpdump?port?80?????????????????????????????????
#?兩個經典命令#?tcpdump?host?google.com
#?tcpdump?-i?eth0?-X?port?\(110?or?143\)??????????
#?查看端口?110(POP)?或?143(IMAP)的數據報文
#?tcpdump?-n?-i?eth0?icmp?????????????????????????
#?只捕獲?ping
#?tcpdump?-i?eth0?-s?0?-A?port?80?|?grep?GET??????
#?-s?0?為全部包,?-A?為?ASCII
另一些重要選項:
- `-A`?? ? 顯示每個包清晰文本(除了報頭)
- `-X`?? ? 顯示包的 ASCII 文本
- `-l`?? ? 使標準輸出變為緩沖行形式
- `-D`?? ? 顯示所有可用網絡接口
對于 Windows 可以使用?[www.winpcap.org](http://www.winpcap.org/)。使用 windump -D 來列出網絡接口。
## 用 nmap 掃描
[Nmap](http://insecure.org/nmap/)?是一個用于 OS 探測的端口掃描工具,她通常在許多發行版上有安裝,并且同樣可用于 Windows。如果你不掃描你的服務器,駭客們會為你做這些...
#?nmap?cb.vu???????????????
#?掃描主機上所有保留的?TCP?端口
#?nmap?-sP?192.168.16.0/24?
#?找出在?0/24?上主機所使用的?IP
#?nmap?-sS?-sV?-O?cb.vu????
#?做秘密?SYN?掃描來探測系統和系統服務的版本信息
PORT??????STATE??SERVICE?????????????VERSION
22/tcp????open???ssh?????????????????OpenSSH?3.8.1p1?FreeBSD-20060930?(protocol?2.0)
25/tcp????open???smtp????????????????Sendmail?smtpd?8.13.6/8.13.6
80/tcp????open???http????????????????Apache?httpd?2.0.59?((FreeBSD)?DAV/2?PHP/4.
[...]
Running:?FreeBSD?5.X
Uptime?33.120?days?(since?Fri?Aug?31?11:41:04?2007)
其他非標準但好用的工具有?`hping`?(www.hping.org),她是一個 IP 分組組裝/分析器,和?`fping`?(fping.sourceforge.net)。fping 可以在一個循環隊列(round-robin fashion)中掃描多種主機。
## 流量控制(QoS)
流量控制管理著一個網絡的隊列、流量監控、調度以及其他流量設置(traffic parameters)。以下簡單實用的示例使用 Linux 和 FreeBSD 的能力來更好的利用帶寬。
### 上傳限制
DSL 或有線調制解調器有一個很長的列隊來提高上傳吞吐量(upload throughput)。然而用一個快速的設備(如以太網)填充這個列隊將大大減少交互性。這就是限制設備上傳速度有用的原因,以匹配調制解調器的實際能力,這可以有效提高交互性。設置大約為 modem 最大速度的 90%。
#### Linux
給 512K 上傳速度的 modem。
#?tc?qdisc?add?dev?eth0?root?tbf?rate?480kbit?latency?50ms?burst?1540
#?tc?-s?qdisc?ls?dev?eth0?????????????????????????
#?狀態
#?tc?qdisc?del?dev?eth0?root??????????????????????
#?刪除隊列
#?tc?qdisc?change?dev?eth0?root?tbf?rate?220kbit?latency?50ms?burst?1540
#### FreeBSD
FreeBSD 使用?`dummynet`?來控制帶寬,其配置工具為 ipfw。Pipe 用來設置限制帶寬的單位[K|M]{比特/秒|字節/秒},0 意味著沒有限制。使用同樣的 pipe 數字可重新配置它。舉個例子,限制上傳帶寬為 500K。
#?kldload?dummynet????????????????????????????????
#?如有必要加載這個模塊#?ipfw?pipe?1?config?bw?500Kbit/s?????????????????
#?創建一個帶寬限制的?pipe#?ipfw?add?pipe?1?ip?from?me?to?any???????????????
#?轉移所有上傳進入這個?pipe
### 服務質量 (Quality of service)
#### Linux
使用?`tc`?的優先級隊列來優化 VoIP。在?[voip-info.org](http://www.voip-info.org/wiki-QoS+Linux+with+HFS)?或?[www.howtoforge.com](http://www.howtoforge.com/voip_qos_traffic_shaping_iproute2_asterisk)?上可以看到完整的例子。假設 VoIP 使用 UDP 端口 10000:11024 并且使用 eth0 設備(也可為 ppp0 或 so)。下列命令定義了三個隊列,并且用 QoS?`0x1e`(設置所有位) 強制 VOIP 流量到隊列 1。默認流量流入隊列 3,Qos?_Minimize-Delay_?流入隊列 2。
#?tc?qdisc?add?dev?eth0?root?handle?1:?prio?priomap?2?2?2?2?2?2?2?2?1?1?1?1?1?1?1?0
#?tc?qdisc?add?dev?eth0?parent?1:1?handle?10:?sfq
#?tc?qdisc?add?dev?eth0?parent?1:2?handle?20:?sfq
#?tc?qdisc?add?dev?eth0?parent?1:3?handle?30:?sfq
#?tc?filter?add?dev?eth0?protocol?ip?parent?1:?prio?1?u32?\
??match?ip?dport?10000?0x3C00?flowid?1:1??????????#?使用服務端端口范圍
??match?ip?dst?123.23.0.1?flowid?1:1??????????????#?或/和使用服務器?IP
狀態和移除:
#?tc?-s?qdisc?ls?dev?eth0?????????????????????????
#?queue?status#?tc?qdisc?del?dev?eth0?root??????????????????????
#?delete?all?QoS
#### 計算端口范圍和掩碼 (mask)
用你所計算的端口掩碼來定義 tc 過濾器的端口范圍。查詢 2^N 端口范圍結尾,推斷范圍并轉換成十六進制。這就是你的掩碼 (mask)。例如 10000 -> 11024,它的范圍是 1024。
#?2^13?(8192)?<?10000?<?2^14?(16384)??????????????
#?結尾是?2^14?=?16384#?echo?"obase=16;(2^14)-1024"?|?bc????????????????
#?掩碼是?0x3C00
#### FreeBSD
假設最大連接帶寬為 500Kbit/s,我們使用優先級 100:10:1 定義 3 個隊列給 VoIP:ssh:剩余所有。
#?ipfw?pipe?1?config?bw?500Kbit/s?
#?ipfw?queue?1?config?pipe?1?weight?100
#?ipfw?queue?2?config?pipe?1?weight?10
#?ipfw?queue?3?config?pipe?1?weight?1
#?ipfw?add?10?queue?1?proto?udp?dst-port?10000-11024
#?ipfw?add?11?queue?1?proto?udp?dst-ip?123.23.0.1?#?或/和使用服務器?IP#?ipfw?add?20?queue?2?dsp-port?ssh
#?ipfw?add?30?queue?3?from?me?to?any??????????????#?剩余所有
狀態和移除:
#?ipfw?list???????????????????????????????????????
#?規則信息
#?ipfw?pipe?list??????????????????????????????????
#?管道信息
#?ipfw?flush??????????????????????????????????????
#?刪除除默認外所有規則
### NIS 調試
一些可工作在已配置好的 NIS 客戶端上的命令:
#?ypwhich??????????????????
#?獲取提供?NIS?服務的服務器名
#?domainname???????????????
#?已配置的?NIS?域名
#?ypcat?group??????????????
#?列印?NIS?映射?group
#?cd?/var/yp?&&?make???????
#?重建?yp?數據庫
ypbind 正在運行嗎?
#?ps?auxww?|?grep?ypbind
/usr/sbin/ypbind?-s?-m?-S?servername1,servername2
#?FreeBSD/usr/sbin/ypbind???????????
#?Linux#?yppoll?passwd.byname
Map?passwd.byname?has?order?number?1190635041.?Mon?Sep?24?13:57:21?2007
The?master?server?is?servername.domain.net.
### Linux
#?cat?/etc/yp.conf
ypserver?servername
domain?domain.net?broadcast