---
# System prepended metadata

title: NASA HW0

---

# NASA HW0
作者：B11902001 陳靖塘
## Network Administration
### 1. True/False
1. True
4G和5G的“G”代表的是generation的意思，5G擁有高速、低延遲等特性，傳輸速度高達1GB/s，而4G僅止於幾十MB/s。
參考資料：https://www.bnext.com.tw/article/54075/5g-4g-difference

2. True
每一個裝置在最初生產製造時就有唯一的MAC address；IP address 的前半為網路的區域、後半為在該網路中的特定裝置，因此兩者皆可以被用來辨識網路上唯一的裝置。
參考資料：https://www.cloudflare.com/learning/network-layer/what-is-a-subnet/
3. False
由於IPv6尚未完全普及，裝置不一定支援IPv6。可利用NAT、subnetting等技術來彌補IPv4 address短缺的問題。
參考資料：https://www.linksys.com/support-article?articleNum=139604

4. False
傳輸封包前往目的地時會先經過VPN server，而從client端前往server途中的source IP即為原本的IP。
參考資料：https://zicodeng.medium.com/how-vpn-works-b7549dcc6ce4

5. True
NAT可以讓眾多private IP使用同一個public IP，讓內部的裝置連到外網，但同時因為大家都是相同的IP，所以外面的裝置無法直接主動連接到內部的裝置。
資料來源：https://en.wikipedia.org/wiki/Network_address_translation

6. False
DHCP server只負責分配IP address，裝置送出的封包並不會經過DHCP server。
資料來源：https://www.techtarget.com/searchnetworking/definition/DHCP
資料來源：https://www.efficientip.com/what-is-dhcp-and-why-is-it-important/

7. True
http並無經過加密，只規範了client request跟host response的標準，因此只要擷取到封包，便能輕易得知封包的內容。
資料來源：https://tw.alphacamp.co/blog/http-https-difference

8. True
由於VLAN間沒有router的存在，因此無法彼此傳送封包。
資料來源：https://www.solarwinds.com/resources/it-glossary/vlan
9. True
裝置發送DHCP request時，會傳送自己裝置NIC的實體位址給DHCP server，並不需要IP address。
資料來源：https://learn.microsoft.com/zh-tw/windows-server/troubleshoot/dynamic-host-configuration-protocol-basics

10. True
即使DNS、NAT等技術不存在，我們仍可以透過IP address直接連到server，並且可手動設定public IP address。那些技術只是讓我們更方便而已，例如DNS將位址轉換為可讀的網址(140.112.30.26->csie.ntu.edu.tw)。
資料來源：https://www.quora.com/How-does-the-internet-work-without-DNS

### 2. Short Answer
1. 
    (a) gateway：閘道器是不同網路中的連通道，用來接收A網路的資料、轉成B網路的協定後再傳送至B網路。
    資料來源：http://dns-learning.twnic.net.tw/internet/intro9.html#1
    
    (b) switch：交換器被用來連接LAN中的各個裝置，並傳輸封包。交換器具有單一性，目的地只會有一個，可能是另一個交換器、路由器、或裝置。
    資料來源：https://www.cloudflare.com/learning/network-layer/what-is-a-network-switch/
    
    (c\) port forwarding：通訊埠轉發讓WAN上的裝置得以連接到LAN內的裝置。Forwarding後，router就能明確的接收外來的資料並傳送到指定的port。
    資料來源：https://portforward.com/
2. 64.128.64.144/28
將四個IP address轉成二進位表示法後我們得知network bit長度為28，host bit長度為4，因此host的數量有16個，而起點在[147/16]16=144，因此最小subnet為64.128.64.144/28。

3. 
    1. Physical Layer
        在同網路中的兩裝置間傳輸資料
    2. Data Link Layer
         IP datagram -> Frames, 辨識封包的網路協定。(e.g. PPP framing, Ethernet IEEE 802.2 framing)
    3. Network/Internet layer
        TCP segment -> IP datagram、給予IP位址、將原datagram分解成小片的fragment，使其更容易在網路中傳輸、routing。(e.g. ARP, ICMP)
    4. Transport Layer
        data -> TCP segment、檢查datagram是否受損(e.g. UDP, TCP)
    5. Application Layer
        讓應用程式傳輸的資料進入TCP/IP model(e.g. http, ftp)
資料來源：https://www.geeksforgeeks.org/tcp-ip-model/
資料來源：https://www.javatpoint.com/computer-network-tcp-ip-model
資料來源：https://www.pcnet.idv.tw/pcnet/network/network_ip_model.htm

4. 
    (a) TCP讓每個packet有唯一的ID，並且按照順序傳輸
    (b) UDP以串流方式傳輸packet
    (c\) TCP較穩定、不易出錯，但速度較慢；UDP速度較快，但容易出錯
    (d) TCP：傳輸電子郵件、檔案傳輸；UDP：網路電話、串流媒體
        資料來源：https://www.spiceworks.com/tech/networking/articles/tcp-vs-udp/
    資料來源：https://nordvpn.com/zh-tw/blog/tcp-udp-bijiao/
    
5. 
    (a)CSMA/CD
    1. 檢查通道是否有其他工作
    2. 若有其他工作，則等待通道空閒
    3. 若無其他工作，則開始傳送並偵測是否出現collision
    4. 若偵測到collision，則進入collision resolution並從頭來過
    5. 若無偵測到collision並完成工作，則工作結束
    
    (b)CSMA/CA
    1. 檢查通道是否有其他工作
    2. 若有其他工作，則等待通道空閒
    3. 若無其他工作，則等待通道有Inter-frame gap的時間
    4. 開始傳送並設timer直到傳輸完成
    5. 若無傳輸完成，則從頭來過
    
    (c\) 兩者最大的差異在於CSMA/CD為傳輸中偵測碰撞、CSMA/CA為先探路再傳輸。CSMA/CD的效率比CSMA/CA好，但同時CSMA/CA的出事率較CSMA/CD低。出事時CSMA/CD的恢復速度較快。
資料來源：https://www.tutorialspoint.com/csma-with-collision-detection-csma-cd
資料來源：https://www.tutorialspoint.com/csma-with-collision-avoidance-csma-ca
資料來源：https://www.tutorialspoint.com/difference-between-csma-ca-and-csma-cd
### 3. Command Line Utilities
1. 
    IP address:
        (a) 140.112.8.116
            `$ ping www.ntu.edu.tw`
        (b) 140.112.30.26
            `$ ping csie.ntu.edu.tw`
    Domain name:
        (a) pc09.cr.liberal.ntu.edu.tw
            `$ host 140.112.145.153`
        (b) linux5.csie.ntu.edu.tw
            `$ host 140.112.30.36`
2. 
    (a) 140.112.151.197
        `$ curl ifconfig.me`
    (b) 140.112.254.4#53
    ```
    $ dig csie.ntu.edu.tw
    $ dig +trace csie.ntu.edu.tw
    140.112.254.4#53(140.112.254.4)
    192.36.148.17#53(i.root-servers.net)
    210.201.138.58#53(b.dns.tw)
    192.83.166.17#53(moemoon.edu.tw)
    163.28.16.10#53(dns.tp1rc.edu.tw)
    140.112.30.13#53(csman.csie.ntu.edu.tw)
    ```
    (c\) 140.112.30.21#53
        `$ dig csie.ntu.edu.tw`
    (d) 
    ```
    $ traceroute to 140.112.30.21 (140.112.30.21), 64 hops max, 52 byte packets
    1  10.5.7.254 (10.5.7.254)  3.904 ms  1.342 ms  1.357 ms
    2  140.112.16.190 (140.112.16.190)  8.696 ms  3.136 ms  2.908 ms
    3  dns.csie.ntu.edu.tw (140.112.30.21)  1.572 ms  1.516 ms  1.707 ms
    ```

## System Administration
本機：MacBook Pro 2019, 2.3 GHz 8-Core Intel Core i9
1. NASA{P1_I'm a good root} 
    ```
    $ sudo -i
    $ ./treasure_box-1
    ```
2. NASA{P2_GoodRemote}
    ```
    $ sudo -i
    $ systemctl enable sshd
    $ systemctl start sshd
    ```
    Oracle VM Manager -> Settings -> Network -> Advanced -> Port Forwarding更改設定
    到本機終端機
    ```
    $ ssh musk@localhost -p 2222
    $ sudo -i
    $ ./treasure_box-2
    ```
3. NASA{P3_I Love SA}
    ```
    $ tar -xvf gifts_from_SA.tar
    $ cat gifts_from_SA/flag_3
    ```
4. NASA{P4_6.1.4-arch1-1}
    ```
    $ uname -r
    ```
5. NASA{P5_AHOY My planet}
    ```
    $ sudo -i
    $ vim /etc/hostname
    $ reboot
    $ ./gifts_from_SA/p5/treasure_box-5
    ```
6. NASA{P6_Tesla Fxxk}
    ```
    $ sudo usermod -c 'Elon Musk Twitter Fxxk' musk
    $ ./gifts_from_SA/p6/treasure_box-6
    ```
    *與鄭允臻討論
7. NASA{P7_Door opened}
    ```
    $ sudo -i
    $ groupadd spy
    $ useradd nasa -g spy
    $ usermod musk -g spy
    $ chown nasa:spy gifts_from_SA/p7/openDoor
    $ su nasa
    $ ./gifts_from_SA/p7/openDoor
    ```
8. NASA{P8_man pacman_package manager utility}
    ```
    $ man pacman
    ```
    pacman讓我們輕鬆管理資源包，方便我們下載、更新，以下為幾個pacman能做到的例子：
    ```
    $ pacman -S package_name #install package
    $ pacman -R package_name #remove package
    $ pacman -Syu #update all packages in the system
    ```
    資料來源：https://wiki.archlinux.org/title/pacman
9. NASA{P9_Taiwan No.1!}
    ```
    $ sudo localectl set-locale LC_CTYPE=zh_TW.UTF-8
    $ sudo localectl set-locale LANG=zh_TW.UTF-8
    $ ./gifts_from_SA/p9/treasure_box-9
    ```
    *與謝政洋討論
10. NASA{P10_sl}
    NASA{P10_cowsay}
    NASA{P10_sl \| lolcat --spread 1.0}
    NASA{P10_ cowsay -f kiss "Hi" \| lolcat --spread 1.0}
11. NASA{P11_good spy}
    ```
    $ cd gifts_from_SA/p11/
    $ mkdir -m 710 hide
    $ cd hide/
    $ ./secret
    ```
12. NASA{P12_nice large file}
    1. 
    ```
    $ for i in {0..9}; do truncate -s 1M ${i}; done
    ```
    2. 
    ```
    $ for i in {0..9}; do dd if=/dev/zero of=$i bs=1048576 count=1; done
    ```
    3. 
    ```c
    #include <stdio.h>
    #include <stdlib.h>

    int main() {
        FILE *file = fopen("0", "wb");
        char space = ' ';
        for (int i = 0; i < 1024*1024; i++)
            fwrite(&space, sizeof(char), 1, file);

        fclose(file);
    }
    ```
    ```
    $ for i in {1..9}; do cp 0 $i; done
    ```
    *與謝政洋討論
    
13. NASA{P13_GuitarHeroBocchiDesu}
    ```
    $ ./bocchi_the_rock^z
    $ ps aux | grep bocchi
    $ kill -9 864
    $ ./getkey < keygen
    ```
    https://www.csie.ntu.edu.tw/~b09902109
    ```
    $ strings bocchi.jpg | grep NASA
    ```
14. NASA{P14_This@large#file%is+such*an&asshole^Dont:you\<think>so}
    ```
    $ sed 's/[^a-zA-Z0-9 ]//g' storybook > output
    $ cat output | grep "pacman so handsome"
    ```
    得到e0b0189cjf34akmqrdsov4msp4atahg3uqnwqaa37msy27nx5i7h6x34nlza7A
    用C語言轉換後得到flag

15. NASA{P15_Do_You_Find_Me_}
    利用C語言找出每個檔案最短的字串
    再找出擁有最短字串的檔案p157/3
    其中有兩個最短字串
    NASA{P15_3b32a04d6%d0129}
    NASA{P15_Do_You_Find_Me_}
    符合要求的為後者

16. NASA{P16_don't laugh me!}
    背景執行的檔案常在systemd
    ```
    $ cd /etc/systemd/system/
    $ cat AutoExec.sh
    ```
    發現會自動檢查systemctl status cronie
    ```
    $ sudo systemctl stop cronie
    $ sudo systemctl disable cronie
    $ sudo systemctl status cronie
    ```
    找到被定期執行的檔案：/usr/lib/systemd/system/cronie.service
    ```
    $ cat ~/flag16
    ```