網路相關之指令

網路相關之指令

前言

  • 在 Ubuntu 中我們可以打開終端機(Ctrl+Alt+T)進行指令操作,就可以透過指令來管理檔案、系統與網路管理。
  • 在說明指令$ls(1)$表示命令提示符號,ls 表示指令本身,(1) 表示本指令是在手冊第一章節中,詳細說明請參閱►線上手冊(man page)
  • 一般指令格式$指令  [選項]  [選項值]
  • 該指令的所有用法 $指令 --help
  • 指令是由英文單字縮寫構成,因為指令繁多,所以理解指令原文,就很容易記住了。列如 :  ls:list (中文為列表)

網路參數設定使用的指令

任何時刻如果你想要做好你的網路參數設定,包括 IP 參數、路由參數與無線網路等等,就得要瞭解底下這些相關的指令才行!其中以 ifconfig 及 route 這兩支指令算是較重要的喔! ^_^!當然,比較新鮮的作法,可以使用 ip 這個彙整的指令來設定 IP 參數啦!

  • ifconfig 查詢、設定網路卡與 IP 網域等相關參數。
  • ifup, ifdown : 這兩個檔案是 script,透過更簡單的方式來啟動網路介面。
  • route :查詢、設定路由表 (route table)。
  • ping :  Packet Internet Groper,網路檢測工具。
  • ip :複合式的指令, 可以直接修改上述提到的功能。
  • nmap  : 偵測非本機上的其他網路主機。
  • netstat看本機網路連線與後門。
  • iptables : 主要是第一層 : 封包過濾式的 netfilter 防火牆,他不是一種服務,是操作netfilter的命令。
  • traceroutes : 檢查從你的電腦到網路另一端的主機是走的什麼路徑。
  • host查出某個主機名稱的 IP。
  • nslookup : 查詢 DNS 回應是否正常。
  • nmcli查詢所有系統的網路界面。
  • 網路硬體檢查 :使用 dmesg 跟 lspci 
  • 其他常用

#ifconfig(8)

設定網路大概是現在電腦系統裝完以後第一件也是最重要的一件事情。在Linux 的系統上面,最底層觀察與設定網路的指令為ifconfig,用法如下:
  1. #ifconfig顯示目前正在活動(active)的網路介面卡資訊
  2. #ifconfig -a顯示系統上面所有的網路介面卡資訊
    • 第一張網卡通常叫做eth0
    • 第二張會叫做eth1。
    • lo代表是loopback,系統預設一定會有這張虛擬的介面 ,預設網路名稱為localhost、IPv4為127.0.0.1
  3. #ifconfig eth0 ►顯示eth0這張網卡的資訊,硬體編號MAC address可以在這邊看到
  4. #ifconfig eth0 up►啟動eth0網卡
  5. #ifconfig eth0 down►關閉eth0網卡
  6. #ifconfig eth0 192.168.55.66►設定網卡的IP位址為192.168.55.66
  7. #ifconfig eth0 netmask 255.255.255.0►設定網卡的網路遮罩為255.255.255.0
  8. #ifconfig eth0 broadcast 192.168.55.255►設定網卡的廣播位址(Broadcast)為192.168.55.255
  9. #ifconfig eth0 192.168.55.66 netmask 255.255.255.0 broadcast 192.168.55.255►指令6, 7, 8的合體,完整設定網卡
  10. #route add default gw 192.168.55.254 eth0►設定網路閘道。雖然不屬於ifconfig指令,但通常設定完IP也必須要指定閘道,網路封包才會知道從哪邊出去,電腦才能夠順利上網
  11. #ifconfig eth0:0 192.168.55.77►指定另外一組IP位址192.168.66.77給eth0這張網路卡。同一張網路卡可以指定很多個IP位址,像是說下面就將另外兩個IP位址指定給eth0這張網卡,名稱分別為eth0:1與eth0:2:
    • ifconfig eth0:1 192.168.55.87
    • ifconfig eth0:2 192.168.55.97
  12. #ifconfig eth0 hw ether AA:BB:CC:DD:EE:FF►將eth0這張網卡的硬體編號MAC address更改成AA:BB:CC:DD:EE:FF
  13. #ifconfig eth0 mtu 1000 ►設定網路的MTU(maximum transmission unit)為1000,意思是最大數據包的只能有1500 bytes。通常乙太網路的預設值是1500,調整這個數值大小有可能會導致網路不通
  14. #ifconfig eth0 promisc ►啟動promiscuous mode。一般來說,網卡拿到封包以後會檢查是不是屬於自己的,如果不是的話就會丟棄;啟動這個promiscuous mode就不會檢查封包,而是把所有接收到的封包都收下來
  15. #ifconfig eth0 -promisc ►關閉promiscuous mode

#ifup(8),#ifdown(8)

  • #ifup eth0►啟用一個 'eth0' 網路設備
  • #ifdown eth0►禁用一個 'eth0' 網路設備

#route -n : show routing table

現在已逐漸由ip route命令代替。

  • #route add default gw 987.321.456.254
  • #route add -net 192.168.0.0 netmask 255.255.0.0 gw 192.168.1.1► configure static route to reach network '192.168.0.0/16'
  • #route del 0/0 gw IP►gateway remove static route

在虛擬機上Virtual Box

在筆電單機上

#ping:Packet Internet Groper

網際網路包探索器。網路檢測工具,透過發送 ICMP ECHO_REQUEST 的封包,檢查自己與特定設備之間的網路是否暢通,速度是否正常。

  • #ping <host>►確認主機的存在,可輸入 hostname 或是 IP。例如:#ping 8.8.8.8#ping google.com

若上面只有  lo: 出現, 為網路不通, 請依序做: (每一步都用 ctrl-c 中斷)

  • #ping 自己
  • #ping 鄰居
  • #nmap -sP 192.168.3.0/24
  • #ping gateway
  • #ping 8.8.8.8   ( google.com)

其中第三步應該要印出區網內所有鄰居。 以下是幾種常見的狀況:

  • 如果看不到半個鄰居, 那多半是自己的問題。 例如網路線沒接好或插錯孔。
  • 如果看得到 gateway 但連不到外界 (例如 google 的 DNS 伺服器 8.8.8.8), 而且鄰居們也是如此, 那多半是 gateway 對外連線有問題。
  • 如果我看得到 gateway 但連不到外界; 可是別人卻看得到 gateway 也連得到外界, 那有可能是我的 IP 跟鄰居衝突了。 請先 ifconfig eth0 down 或 ifdown eth0 清除網卡舊的設定, 再換一個閒置的 IP 再試試看。 (見下方 「有線網卡, 固定 ip」。)

#ip(7,8)

  • #ip addr show <nic>►顯示nic網路卡的ip位址。
  • #ip route del 0/0
  • #ip link show►想要觀察 Linux 主機上面的網路卡有多少

#nmap -Network Mapper

# nmap [掃瞄類型] [掃瞄參數] [hosts 位址與範圍]

[掃瞄類型]:主要的掃瞄類型有底下幾種:

  • -sT:掃瞄 TCP 封包已建立的連線 connect() !
  • -sS:掃瞄 TCP 封包帶有 SYN 標籤的資料
  • -sP:以 ping 的方式進行掃瞄
  • -sU:以 UDP 的封包格式進行掃瞄
  • -sO:以 IP 的協定 (protocol) 進行主機的掃瞄

[掃瞄參數]:主要的掃瞄參數有幾種:

  • -PT:使用 TCP 裡頭的 ping 的方式來進行掃瞄,可以獲知目前有幾部電腦存活(較常用)
  • -PI:使用實際的 ping (帶有 ICMP 封包的) 來進行掃瞄
  • -p :這個是 port range ,例如 1024-, 80-1023, 30000-60000 等等的使用方式

[Hosts 位址與範圍]:這個有趣多了,有幾種類似的類型

  • 192.168.1.100  :直接寫入 HOST IP 而已,僅檢查一部;
  • 192.168.1.0/24 :為 C Class 的型態,
  • 192.168.*.*  :嘿嘿!則變為 B Class 的型態了!掃瞄的範圍變廣了!
  • 192.168.1.0-50,60-100,103,200 :這種是變形的主機範圍啦!很好用吧!

範例1:使用預設參數掃瞄本機所啟用的 port (只會掃瞄 TCP)

  • $nmap localhost

nmap 的用法很簡單吶!就直接在指令後面接上 IP 或者是主機名稱即可。不過,在預設的情況下 nmap 僅會幫你分析 TCP 這個通訊協定而已,像上面這個例子的輸出結果。但優點是順道也將開啟該埠口的服務也列出來了, 真是好! ^_^!那如果想要同時分析 TCP/UDP 這兩個常見的通訊協定呢?可以這樣做:

範例2:同時掃瞄本機的 TCP/UDP 埠口

  • $nmap -sTU localhost

嘿嘿!與前面的範例比較一下,你會發現這次多了幾個 UDP 的埠口,這樣分析好多了!然後, 如果你想要瞭解一下到底有幾部主機活在你的網路當中時,則可以這樣做:

範例3:透過 ICMP 封包的檢測,分析區網內有幾部主機是啟動的

  • $nmap -sP 192.168.1.0/24

看到否?鳥哥的環境當中有三部主機活著吶 (Host is up)!並且該 IP 所對應的 MAC 也會被記錄下來, 很不錯吧!如果你還想要將各個主機的啟動的 port 作一番偵測的話,那就得要使用:

  • $nmap 192.168.1.0

之後你就會看到一堆 port number 被輸出到螢幕上囉~如果想要隨時記錄整個網段的主機是否不小心開放了某些服務, 嘿嘿!利用 nmap 配合資料流重導向 (>, >> 等) 來輸出成為檔案, 那隨時可以掌握住您區域網路內每部主機的服務啟動狀況啊! ^_^

請特別留意,這個 nmap 的功能相當的強大,也是因為如此,所以很多剛在練習的黑客會使用這個軟體來偵測別人的電腦。 這個時候請您特別留意,目前很多的人已經都有『特別的方式』來進行登錄的工作!例如以 TCP_Wrappers (/etc/hosts.allow, /etc/hosts.deny) 的功能來記錄曾經偵測過該 port 的 IP! 這個軟體用來『偵測自己機器的安全性』是很不錯的一個工具,但是如果用來偵測別人的主機, 可是會『吃上官司』的!特別留意!!

其他範例

  • #nmap 192.168.1.21
  • #nmap -PN 192.168.1.21

#netstat - 看本機網路連線與後門

如果你覺得你的某個網路服務明明就啟動了,但是就是無法造成連線的話,那麼應該怎麼辦? 首先你應該要查詢一下自己的網路介面所監聽的埠口 (port) 來看看是否真的有啟動,因為有時候螢幕上面顯示的 [OK] 並不一定是 OK 啊!

  • #netstat -an►確認未被連接的連接埠。

# netstat -[參數]  

  • -r  :列出路由表(route table),功能如同 route 這個指令;
  • -n  :不使用主機名稱與服務名稱,使用 IP 與 port number ,如同 route -n
  • 與網路介面有關的參數:
  • -a  :列出所有的連線狀態,包括 tcp/udp/unix socket 等;
  • -t  :僅列出 TCP 封包的連線;
  • -u  :僅列出 UDP 封包的連線;
  • -l  :僅列出有在 Listen (監聽) 的服務之網路狀態;
  • -p  :列出 PID 與 Program 的檔名;
  • -c  :可以設定幾秒鐘後自動更新一次,例如 -c 5 每五秒更新一次網路狀態的顯示;

範例1:列出目前的路由表狀態,且以 IP 及 port number 顯示:

  • $netstat -rn
    • 其實這個參數就跟 route -n 一模一樣,對吧!這不是 netstat 的主要功能啦!

範例2:列出所有網路連線狀態,使用 IP 與 port number,列出 PID/Program Name

  • $netstat -anp

範例3:列出所有TCP /UDP封包的連線,及對應的服務PID

  • $netstat -tup   // show all active network connections and their PID

範例4:列出 "監聽中" 的TCP /UDP封包的連線,及對應的服務PID

  • $netstat-tupl     //show all network services listening on the system and their PID

netstat 的輸出主要分為兩大部分,分別是 TCP/IP 的網路介面部分,以及傳統的 Unix socket 部分。 還記得我們在基礎篇裡面曾經談到檔案的類型嗎?那個 socket 與 FIFO 檔案還記得吧? 那就是在 Unix 介面用來做為程式資料交流的介面了,也就是上頭表格內看到的 Active Unix domain sockets 的內容囉~

通常鳥哥都是建議加上『 -n 』這個參數的,因為可以避過主機名稱與服務名稱的反查,直接以 IP 及埠口號碼 (port number) 來顯示,顯示的速度上會快很多!至於在輸出的訊息當中, 我們先來談一談關於網路連線狀態的輸出部分,他主要是分為底下幾個大項:

Proto:該連線的封包協定,主要為 TCP/UDP 等封包;

Recv-Q:非由使用者程式連接所複製而來的總 bytes 數;

Send-Q:由遠端主機所傳送而來,但不具有 ACK 標誌的總 bytes 數, 意指主動連線 SYN 或其他標誌的封包所佔的 bytes 數;

Local Address:本地端的位址,可以是 IP (-n 參數存在時), 也可以是完整的主機名稱。使用的格是就是『 IP:port 』只是 IP 的格式有 IPv4 及 IPv6 的差異。 如上所示,在 port 22 的介面中,使用的 :::22 就是針對 IPv6 的顯示,事實上他就相同於 0.0.0.0:22 的意思。 至於 port 25 僅針對 lo 介面開放,意指 Internet 基本上是無法連接到我本機的 25 埠口啦!

  • Foreign Address:遠端的主機 IP 與 port number
  • stat:狀態列,主要的狀態含有:
  • ESTABLISED:已建立連線的狀態;
  • SYN_SENT:發出主動連線 (SYN 標誌) 的連線封包;
  • SYN_RECV:接收到一個要求連線的主動連線封包;
  • FIN_WAIT1:該插槽服務(socket)已中斷,該連線正在斷線當中;
  • FIN_WAIT2:該連線已掛斷,但正在等待對方主機回應斷線確認的封包;
  • TIME_WAIT:該連線已掛斷,但 socket 還在網路上等待結束;
  • LISTEN:通常用在服務的監聽 port !可使用『 -l 』參數查閱。

基本上,我們常常談到的 netstat 的功能,就是在觀察網路的連線狀態了,而網路連線狀態中, 又以觀察『我目前開了多少的 port 在等待用戶端的連線』以及 『目前我的網路連線狀態中,有多少連線已建立或產生問題』最常見。 那你如何瞭解與觀察呢?通常鳥哥是這樣處理的:

範例5:秀出目前已經啟動的網路服務

  • $netstat -tulnp

看到上頭的特殊字體吧?那代表目前已經建立連線的一條網路連線,他是由遠端主機 192.168.1.101 啟動一個大於 1024 的埠口向本地端主機 192.168.1.100 的 port 22 進行的一條連線, 你必須要想起來的是:『Client 端是隨機取一個大於 1024 以上的 port 進行連線』,此外『只有 root 可以啟動小於 1024 以下的 port 』,那就看的懂上頭那條連線囉!如果這條連線你想要砍掉他的話, 看到最右邊的 4716 了沒? kill 會用吧! ^_^

#iptables

#traceroutes:

檢查從你的電腦到網路另一端的主機是走的什麼路徑

  • #traceroute google.com

#host : 查出某個主機名稱的 IP 

這個指令可以用來查出某個主機名稱的 IP 喔!舉例來說,我們想要知道 tw.yahoo.com 的 IP 時,可以這樣做:

host [-a] hostname [server]

選項與參數:
-a :列出該主機詳細的各項主機名稱設定資料
[server] :可以使用非為 /etc/resolv.conf 的 DNS 伺服器 IP 來查詢。

範例:列出 tw.yahoo.com 的 IP 

  • $host tw.yahoo.com

#nslookup:查詢 DNS 回應是否正常

  • #nslookup google.com
這玩意兒的用途與 host 基本上是一樣的,就是用來作為 IP 與主機名稱對應的檢查, 同樣是使用

#nmcli : 查詢所有系統的網路界面

  • # nmcli connection show        //查詢所有系統的網路界面

上面的 NAME 項目就是網路連線界面,而 DEVICE 就是剛剛查詢到的你的網路卡代號。通常網路界面名稱會與網路卡代號相同! 這樣在設定時比較不容易搞錯就是了。至於 UUID 則是裝置識別碼,基本上每個裝置的識別碼都不一樣才對。最終的 TYPE 當然就是乙太網路 (etherner) 囉。

  • 停止界面運作: #nmcli connection down 界面名稱
  • 刪除界面的方法: #nmcli connection delete 界面名稱
  • 新增的方法: #nmcli connection add [type ethernet] [con-name eth0] [ifname eth0]
  • 重新觀察界面的詳細設定: #nmcli connection show eth0

在實體機器上面不需要進行這個步驟~在虛擬機器上面就需要這樣進行!畢竟這個連線界面是假的!所以我們要改成真的啦!

# nmcli connection show eth0  的內容

  • connection.autoconnect [yes|no]:是否需要啟動這個網路界面
  • ipv4.method [auto|manual]:取得的方式為自動或手動
  • ipv4.addresses [IP/Netmask]:直接設定 IP 位址與子網路遮罩
  • ipv4.gateway [GWIP]:設定 Gateway 的 IP 位址
  • ipv4.dns [DNSIP]:設定 DNS server 的 IP 位址

網路硬體檢查: 使用 dmesg 跟 lspci 


其他常用

  • #rsync -av <host:dir1/> <dir2/>►讓 host的dir1 與 dir2 同步。
  • #rsync -av <dir1/> <host:dir2/>►讓 dir1 與 host 的 dir2 同步。
  • #scp <file> <host:>►將檔案 file 複製到 host 的 home下面。
  • #scp <host:dir1/file> <dir2/>►將 host 的 dir1/file 複製到 dir2下面。
  • #dhclient eth0►以dhcp模式啟用 'eth0'
  • #pppoeconf►#pppoeconf  或 有些版本的指令是 #pppoe-setup 而不是 #pppoeconf; 總之先按 #pppoe 然後按一兩次 Tab 鍵, 系統會提示。
  • echo "1" > /proc/sys/net/ipv4/ip_forward activate ip routing
  • hostname
  • host www.example.com lookup hostname to resolve name to ip address 
  • mii-tool eth0 show link status of 'eth0'
  • ethtool eth0 show statistics of network card 'eth0'
  • tcpdump tcp port 80 show all HTTP traffic
  • iwlist scan show wireless networks
  • iwconfig eth1 show configuration of a wireless network card
  • whois www.example.com lookup on Whois database


參考資料

特色、摘要,Feature、Summary:

關鍵字、標籤,Keyword、Tag:

  • Ubuntu,Linux,Network,

留言

這個網誌中的熱門文章

Ubuntu 常用指令、分類與簡介

iptables的觀念與使用

網路設定必要參數IP、netmask(遮罩)、Gateway(閘道)、DNS

了解、分析登錄檔 - log

Python 與SQLite 資料庫

Blogger文章排版範本

Pandas 模組

如何撰寫Shell Script

查詢指令或設定 -Linux 線上手冊 - man

下載網頁使用 requests 模組