簡單來說就是把很多台電腦用網路線或是 WIFI 串連在一起就是所謂的網路了
可以比喻為一個送信的過程
網路也是一樣的概念,假設要去瀏覽 Google 這個網站
跟 IP 的差異是 IP 是可以變動的, Mac Address 是固定的,所以在區域網路裡面是檢查 Mac Address 的,而不是 IP Address
在古代沒有 Switch 的時候, 適用 Hub 來連接多台電腦,但是 Hub 是沒有腦袋的,他會把信送給所有人,每台電腦會檢查 Mac Address 看那封信是不是寄給自己的,如果是就接收,如果不是就丟掉
在有 Switch 後就只會把信送給對的人
但在我們瀏覽網頁是用 IP Address 來找到對方的,要找到對方的 Mac Address 就要用 ARP 協定
會有一個 ARP Table 來記錄對方的 Mac Address,固定一段時間後會清理和更新
會不會有資安問題?
會的,如果在我問目標的 Mac Address 時,有壞人騙我說他是目標的 Mac Address,這樣就會把信送給壞人,這就是 ARP Spoofing
Lab 關掉了不能玩 😥
sudo tcpdump -Ai eth1
tcpdump 去聽封包的內容, -A
是把封包的內容顯示出來, -i
是指定網卡
sudo arpspoof -i eth1 -t 192.168.111.1 192.168.111.2
這個指令就會幫你實作 ARP Spoofing 把 192.168.111.1
要傳給 192.168.111.2
的封包攔截
上下最不同的是,上面的送的人是區域網路,下面的是送給區域外的人,所以他是要經過 Router 來轉發的
一樣用寄信來比喻
上下最大的差異就是在區域內還是區域外,在網路內也是一樣的,要怎沒看是在區域內外等等會講
可以通過判斷目標 IP 是否是寄給 Default Gateway 來判斷是區域內還是區域外
如何知道來源 IP 和目標 IP 是不是在同一個網段?
把 Address 和 Netmask 的二進制做 AND 運算,就會是 Network ID ,俗果兩個 Network ID 一樣就是在同一個網段 (所以如果 netmask 是 255.255.255.0
的話其實就看 IP 前九碼是不是都一樣就知道是不是在同區域,如果 netmask 是 255.255.0.0
就看 IP 前六碼)
/24
的意思 255.255.255.0
轉成二進制是 11111111.11111111.11111111.00000000
,因為有 24 個 1,就表示成 /24
資料送到 router 時, router 會根據上面的路由表傳送 packet ,路由會根據他的路由地圖來決定要傳送給誰(就像我們可以利用 mtr 看到我們資料是怎麼傳送目標的)
上面這個就是路由表,如果是 192.168.20.5 就會通過 192.168.20.2 出去
router table 會以 netmask 最長的為優先
default gateway 就是 0.0.0.0/0
的縮寫,那如果沒有 default gateway 就會找不到路徑,就會出現 Destination Host Unreachable
就是直接丟過去,不管有沒有真的收到
如果需要可靠信傳送,要是資料很大用 UDP 傳過去可能就會很破碎,TCP 就會每次都確認有沒有收到,有收到後才會傳下一個
因為 TCP 的效能有點差,現在有一個叫做 QUIC 的協定,他是基於 UDP 的,但是他有 TCP 的功能,所以效能會比較好
因為一台電腦上有很多程式,所以要用 Port 來區分,每個服務都有自己的 Port,像是 HTTP 預設是 80,HTTPS 是 443
現今 IPv4 最嚴重的問題,就是 IP 數量不夠用,因為 IP 最多就只有 2^32
個,也就是 4,294,967,296
個,而且還有一些 IP 是不能用的,很明顯不可能讓地球上每個人都能用,這樣就會有些人沒有辦法用網路,所以就有兩個辦法
HTTP/2 之前的版本是一種建立在 TCP 上的傳輸協定。(HTTP/3 例外,今天不提)
為何需要使用 TCP 是因為網頁他會需要可靠性的傳輸。
路徑就是想要檔案的位置
status code: 2開頭成功,3開頭重新導向,4開頭客戶端錯誤,5開頭伺服器錯誤
全名叫做 Domain Name System,是一種建立在 UDP 的協定。
主要用來查詢 Domain Name 的 IP Address 或是查詢 IP Address 對應的 Domain Name。
那什麼是 Domain Name 呢?
區分成這樣是為了讓 Kernel 方便管理 User Space 的 Application ,避免有些 Application 搶資源,這時候就可以由 Kernel Space 停止那些指令運行
Secure Shell Protocol
-
d
l
用戶:就用戶
群組:主群組和附加群組
密碼不會存在這,所以上面是寫 x
r :
表示具有讀取目錄結構清單的權限,可以查詢該目錄下的檔名資料。
w :
建立新的檔案與目錄;
刪除已經存在的檔案與目錄(不論該檔案的權限為何!)
將已存在的檔案或目錄進行更名;
搬移該目錄內的檔案、目錄位置。
x (access directory):
使用者能否進入該目錄成為工作目錄的用途(能否cd進入)\
SUID:執行時相當於擁有檔案owner的權限,僅對檔案生效
SGID:
對檔案設定:執行時相當於擁有檔案group的權限
對目錄設定:此目錄下的有效群組(effective group)將會變成該目錄的群組
SBIT:僅能對目錄設定,使用者在該目錄下建立檔案或目錄時,僅有自己與 root 才有權力刪除該檔案
SUID = 4 SGID = 2 SBIT = 1 _755
他的值會是 777 減去 umask 的值,所以如果 umask 是 022 的話,那就是 755
-S
: 顯示成比較好檢視的樣子
man xxx
xxx -h
/ xxx --help
cd
: change directory (可用絕對路徑或相對路徑)pwd
: print working directoryls
: list
-a
: 顯示隱藏檔-l
: 顯示詳細資訊 (ll
是 ls -l
的縮寫)exa
: 跟 ls
類似,但是有顏色rm
: remove
-r
: 遞迴刪除-f
: 強制刪除cp
: copymv
: movecat
: concatenatetac
: 反向顯示od
: octal dumpnl
: number lines(會把檔案的每一行編號)more
: 一次顯示一頁less
: 也是一次顯示一頁,但是可以往前翻 (vim 的操作方式)mkdir
: make directorytouch
: 建立檔案rmdir
: remove directorynano
: 編輯器vi
: 很棒的編輯器vim
: 更棒的編輯器chmod
: change mode
chmod 777 xxx
: 三個數字分別代表 user/group/others,每個數字代表 rwx,所以 777 就是全部都有 rwxchmod -x xxx
: 移除所有人對 xxx 的執行權限chmod +x xxx
: 給所有人對 xxx 的執行權限chmod u+x xxx
: 給 user 對 xxx 的執行權限 (u = user, g = group, o = others, a = all)chmod 4755 xxx
來設定 SUID ,然後+s
來設定 SUID/SGID,+t
來設定 SBITchown
: change owner
chown user xxx
: 把 xxx 的 owner 改成 userchown user:group xxx
: 把 xxx 的 owner 改成 user,group 改成 groupchgrop
: change group
chgrp group xxx
: 把 xxx 的 group 改成 groupchattr
: change attribute
chattr +i xxx
: 讓 xxx 變成不可刪除chattr +a xxx
: 讓 xxx 變成只能增加資料,不能刪除lsattr
: 顯示檔案屬性passwd
: 更改密碼which
/ whereis
: 找指令的位置tar
: 包裝 or 壓縮檔案
v
: 顯示詳細資訊f
: 檔案名稱c
: 建立壓縮檔j
: 用 bzip2 壓縮z
: 用 gzip 壓縮J
: 用 xz 壓縮x
: 解壓縮tar -cvf xxx.tar xxx
: 壓縮tar -xvf xxx.tar
: 解壓縮tar -zcvf xxx.tar.gz xxx
: 壓縮成 .tar.gztar -zxvf xxx.tar.gz
: 解壓縮 .tar.gz|
,把前面的結果傳給後面
ls | grep xxx
就是把 ls
的結果傳給 grep
來找 xxx
sleep
: 會暫停後面接的秒數Ctrl+C
: 中斷目前的指令Ctrl+Z
: 暫停目前的指令 (suspended)
jobs
: 查看暫停的指令fg
: 把暫停的指令恢復 (利用 %{number}
來指定要恢復 jobs 中指令的編號)bg
: 把暫停的指令變成背景執行Ctrl+D
: EOF>
,把前面的結果寫到後面的檔案,>>
是 append, <
是把檔案的內容傳給後面的指令
ls > xxx.txt
就是把 ls
的結果寫到 xxx.txt
ls >> xxx.txt
就是把 ls
的結果 append 到 xxx.txt
cat < xxx.txt
就是把 xxx.txt
的內容傳給 cat
2>
是把錯誤訊息寫到檔案.
: 任意字元*
: 0 到無限多次+
: 1 到無限多次[abc]
: a, b, c 任一個[^abc]
: 除了 a, b, c 之外[a-z]
: a 到 z 之間sed
: stream editor 有點複雜,會用到的時候再查就好grep
: global regular expression print
-i
: 不分大小寫-v
: 反向選取-n
: 顯示行數-r
: 遞迴-l
: 只顯示檔名-c
: 只顯示數量-e
: 多個條件-E
: 正規表達式-A
: 顯示後面幾行-B
: 顯示前面幾行-C
: 顯示前後幾行grep xxx *
: 在所有檔案中找 xxx
find
: 找檔案.sh
結尾的檔案,然後裡面寫一些指令chmod
加執行權限就可以執行了crontab
: 定時執行
crontab -e
: 編輯crontab -l
: 列出crontab -r
: 刪除* * * * * xxx
: 分鐘 小時 日 月 星期幾 指令apt update
: 更新套件apt upgrade
: 升級套件 (順序會是先更新再升級)apt install xxx
: 安裝套件apt remove xxx
: 移除套件apt search xxx
: 搜尋套件apt list
: 列出所有套件apt show xxx
: 顯示套件資訊apt autoremove
: 移除不需要的套件apt clean
: 清除快取apt autoclean
: 清除舊的快取$()
: 會優先執行 ()
指令的標準輸出,當成前面的指令的參數
echo $(ls)
就是把 ls
的結果傳給 echo
cut
: 切割
-d
: 分隔符號-f
: 第幾個cut -d " " -f 1 xxx
: 以空格切割,取第一個