2018年10月23日 星期二

MySQL語法

*基本語法

顯示所有資料庫
mysql> SHOW DATABASES;
選擇某一資料庫
mysql> USE insite;
列出資料庫底下的資料表
mysql> SHOW TABLES FROM insite;

*建立資料表

mysql> CREATE TABLE UserList_IPSBypassHTTPS LIKE UserList;
mysql> INSERT UserList_IPSBypassHTTPS SELECT * FROM UserList;

*刪除資料表

mysql> DROP TABLE UserList_IPSBypassHTTPS;

*新增資料表欄位

alter table 資料表名稱 add column 欄位名稱 資料型態;
mysql> ALTER TABLE `UserList` ADD COLUMN `https_bypass` TINYINT(1) NULL DEFAULT '0' AFTER `mirror_downlink`;

*更新修改欄位資料

update 資料表名稱 set 欄位1='值1',欄位2='值2',欄位3='值3',... 欄位N='值N'
where 條件式;
mysql> UPDATE UserList set https_bypass= '1' WHERE (service_ports='1280,1536') AND (dpid=10501 or dpid=10801 or dpid=11101);

mysql> SELECT * FROM UserList WHERE (service_ports='1280,1536') AND (dpid=10501 or dpid=10801 or dpid=11101);

*查詢結果遞減排序

select * from 資料表名稱 order by 欄位名 desc;
mysql> SELECT * FROM UserList WHERE (ip='192.168.105.168/32') ORDER BY priority DESC;

*找出資料表重複的資料

mysql> SELECT * FROM UserList GROUP BY ip HAVING count(*)>1;

*查詢欄位資料的唯一值(重複值只列一次)

select distinct 欄位名 from 資料表名稱;
mysql> select distinct ip from UserList WHERE (dpid=10501 or dpid=10801 or dpid=11101);

2018年10月22日 星期一

深度學習

什麼是人工智慧、機器學習、深度學習?(一)
x

https://www.cool3c.com/article/133363

深度學習
應用: 影像辨識、語音辨識、自然語言處理
隱藏層Hidden Layers的數量: 也不是越多層越好,可能最後結果會模糊了
神經元
最重要是調整(權重w)
(輸出z)
(偏差值b)

[梯度下降法]: 最終目的就是透過梯度下降法找到最佳函樹(最小值)   目前當下最好
薛丁格的貓

神經網路

1.CNN: 卷積神經網路 影像辨識
(1)卷積層: 提取特徵-透過滑動視窗做過濾=>找到特徵值
(2)池化層: 投票 每個區域選出最大or最小值
(3)全連接層:

2.RNN: 遞歸神經網路
有記憶功能的神經網路
以CNN為base,有記憶功能
LSTM長短期記憶-擁有記憶與遺忘(保護)機制的功能

3.GAN: 生成對抗網路
由任兩個神經網路組成,
其中一個網路負責生成內容
    另一個網路負責判斷內容(判別網路)
生成網路要僅可能欺騙判別網路


1. 人工智慧(AI)
2. 機器學習(ML)
可以先分兩種"監督式"和"非監督式"

非監督式學習是一種機器學習的方式,並不需要人力來輸入標籤。它是監督式學習強化學習等策略之外的一種選擇。在監督式學習中,典型的任務是分類和迴歸分析,且需要使用到人工預先準備好的範例(examples)。
一個常見的非監督式學習是數據聚類。在人工神經網路中,生成對抗網絡(GAN)、自組織映射(SOM)和適應性共振理論(ART)則是最常用的非監督式學習。
ART模型允許叢集的個數可隨著問題的大小而變動,並讓使用者控制成員和同一個叢集之間的相似度分數,其方式為透過一個由使用者自定而被稱為警覺參數的常數。ART也用於模式識別,如自動目標辨識數位信號處理。第一個版本為"ART1",是由卡本特和葛羅斯柏格所發展的。

#k-mean
他可以將資料分類
https://dotblogs.com.tw/dragon229/2013/02/04/89919

#機器學習-支撐向量機(support vector machine, SVM)
https://medium.com/@chih.sheng.huang821/%E6%A9%9F%E5%99%A8%E5%AD%B8%E7%BF%92-%E6%94%AF%E6%92%90%E5%90%91%E9%87%8F%E6%A9%9F-support-vector-machine-svm-%E8%A9%B3%E7%B4%B0%E6%8E%A8%E5%B0%8E-c320098a3d2e


3. 深度學習(DL): 神經元
深度學習(DL)可以這樣被定義:「一種實現機器學習的技術。」
這樣的DL技術被稱為深度神經網絡(deep neural networks – DNNs)
x

(1)CNN: 影像辨識
(2)RNN:
(3)GAN:
(4)貝式分類: 垃圾郵件

Splunk

工具:
Anaconda
Google Tensorflow: 封包鑑識
Google Keras:

https://blog.gtwang.org/programming/tensorboard-tensorflow-visualization-tutorial/

CNTK


案例:
Day 02:撰寫第一支 Neural Network 程式 -- 阿拉伯數字辨識
x

https://ithelp.ithome.com.tw/articles/10191404
圖. 阿拉伯數字(0~9)辨識的流程
先關心在 input and output
我要辨識數字
0-9
輸入是一張圖 都是 pixel
透過中間的隱藏層
不一定只有一層喔
慢慢調整 隱藏層 最後可以訓練出來模型

yolo
http://mropengate.blogspot.com/2018/06/yolo-yolov3.html

推薦:
Jupyter notebook


有空可以看一下
https://kknews.cc/zh-tw/tech/ovo8zom.html
https://www.youtube.com/playlist?list=PLZHQObOWTQDNU6R1_67000Dx_ZCJB-3pi





BDOS 模糊理論+向量學習

Q: 深度學習可能拿到分析股票市場嗎?



2018年7月28日 星期六

ping的packet size限制

環境: Apple MacBook Pro (以下會根據你的平台數據會有所不同)

$ ping 8.8.8.8 -s 8185 -c 1
PING 8.8.8.8 (8.8.8.8): 8185 data bytes
ping: sendto: Message too long
[-s packetsize]
[-c count]
$ ping 8.8.8.8 -s 8184 -c 1
PING 8.8.8.8 (8.8.8.8): 8184 data bytes
8192 bytes from 8.8.8.8: icmp_seq=0 ttl=121 time=57.464 ms

--- 8.8.8.8 ping statistics ---
1 packets transmitted, 1 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 57.464/57.464/57.464/0.000 ms

為什麼用ping來打size只能限制到8184?


1. 查看系統核心參數,因爲icmp是raw socket
$ sysctl -a | grep net.inet.raw
net.inet.raw.maxdgram: 8192
net.inet.raw.recvspace: 8192
8192代表Transport Layer socket的大小(限制)
接下來看如果傳輸層要傳送8192 bytes一次需要被切割幾個封包?

2. Ethernet的MTU為1500,即IP header裡面的Total length最大為1500
(IP header 20 + Data 1480)
所以8192 = 1480 * 5 + 792
==> 所以要六個封包才能送完 (No 27, 28, 29, 30, 31, 32)

3. 再由觀察wireshark抓封包得知
封包總Length (Ethernet header + IP header + Transport header + Message)
1514 * 5 + 826 = 8396 bytes
此案例為icmp所以封包格式為
Ethernet header + IP header + ICMP header + ICMP payload
8396 - (IP header 20 *6) - (Ethernet header 14 * 6) = 8192 bytes (比對吻合)

2018年5月16日 星期三

相同的connection只會中NAT table的rule一次,其餘就不會進去

網路拓撲
[Host1 - DNS Server] em1: 192.168.246.101 / 255.255.255.0
[Host2 - DNS Client] em1: 192.168.246.102 / 255.255.255.0

在Host1加入一條nat規則,此規則只是要驗證
相同的connection只會中NAT table的rule一次,其餘就不會進去
Host1# iptables -t nat -A PREROUTING -i em1 -p udp -s 192.168.246.102 --j DNAT --to 192.168.246.101:53
把DNS回應封包Drop掉,Host1就會用相同的socket pair重送(dig預設重送三次)
Host1# iptables -A OUTPUT -p udp --sport 53 -j DROP

可加Log透過dmesg來追蹤封包
Host1# iptables -t mangle -A PREROUTING -i em1 -p udp --dport 53 -j LOG --log-level 4 --log-prefix MANGLE_TEST:
Host1# iptables -t nat -I PREROUTING -i em1 -p udp --dport 53 -j LOG --log-level 4 --log-prefix NAT_TEST:
Host1# iptables -A INPUT -i em1 -p udp --dport 53 -j LOG --log-level 4 --log-prefix INPUT_TEST:

從Host2利用dig產生DNS查詢封包到Host1
Host2# dig www.google.com @192.168.246.101

可觀察在NAT table的rule與conntrack,預設client會重送三次封包,match只會中一次
Host1# iptables -t nat -nvL PREROUTING
Chain PREROUTING (policy ACCEPT 8 packets, 566 bytes)
 pkts bytes target     prot opt in     out     source               destination
    1    71 LOG        udp  --  em1    *       0.0.0.0/0            0.0.0.0/0            udp dpt:53 LOG flags 0 level 4 prefix "NAT_TEST:"
    1    71 DNAT       udp  --  em1    *       192.168.246.102      0.0.0.0/0            to:192.168.246.101:53

Host1# conntrack -L | grep 192.168.246.102
udp      17 177 src=192.168.246.102 dst=192.168.246.101 sport=51161 dport=53 src=192.168.246.101 dst=192.168.246.102 sport=53 dport=51161 [ASSURED] mark=0 use=1

注意事項: 要conntrack有這筆connection才會之後bypass NAT rule

參考連結:
packet 沒有跑到 iptables 的 nat table 花了我一天半




2018年4月3日 星期二

git

[下載篇]
$ git clone https:/xxx./xxx.git
$ git checkout dev

[提交篇]
$ git add <file>
$ git status
$ git commit -m "description"
$ git push

建立dns_caa branch
$ git checkout -b dns_caa
($ git branch dns_caa)
($ git checkout dns_caa)

[合併篇]
branch: master / dev / dns_caa
dns_caa branch合併到dev branch
$ git checkout dev
Already on 'dev'
Your branch is up-to-date with 'origin/dev'.
$ git merge dns_caa
($ git merge origin/dns_caa)
Performing inexact rename detection: 100% (92832/92832), done.
Auto-merging host/doc/Makefile.in
CONFLICT (content): Merge conflict in host/doc/Makefile.in
Automatic merge failed; fix conflicts and then commit the result.
git status

[還原篇]
A->B->C->D->E
某個檔案要還原到之前C版本
$ git log -p <file>
$ git checkout <commit id> <file>

要還原到之前C版本
$ git log
$ git revert <commit id>

commit id: XXXXXX
e.g. 7478a4

2018年4月2日 星期一

Public DNS Reslover


CloudFlare Public DNS: 1.1.1.1 / 1.0.0.1 (APNIC)
    https://blog.cloudflare.com/announcing-1111/
    https://www.ithome.com.tw/news/122204
Google Public DNS: 8.8.8.8 / 8.8.4.4
Quad 9: 9.9.9.9
    https://www.quad9.net/
    IBM、Global Cyber Alliance和Packet Clearing House

OpenDNS208.67.222.222 / 208.67.220.220
    OpenDNS Family: 208.67.222.123 / 208.67.220.123
⇨ Comodo Secure: 156.154.70.22 (NeuStar) / 156.156.71.22 (AFNIC)
⇨ DNS Advantage: 156.154.70.1 / 156.154.71.1 (NeuStar)
⇨ Norton DNS: 198.153.192.1 / 198.153.194.1 (Symantec)
⇨ DigitalOcean DNS
    https://www.digitalocean.com/community/tutorials/an-introduction-to-digitalocean-dns











2018年2月23日 星期五

mount bind

The bind mounts.
Since Linux 2.4.0 it is possible to remount part of the file hierarchy somewhere else. The call is
   mount --bind olddir newdir

remount 只能將當前的掛載點重新掛載;
bind mounts 則可以掛載檔案系統下的檔案目錄,不受限於掛載點

# mkdir dir1 dir2
# touch dir1/dir1_foo
# touch dir2/dir2_foo
# ls -li -R
1177191 drwxr-xr-x 2 root root 4096 Feb 23 07:11 dir1
1177192 drwxr-xr-x 2 root root 4096 Feb 23 07:12 dir2
./dir1:
1085818 -rw-r--r-- 1 root root 0 Feb 23 07:11 dir1_foo
./dir2:
1085819 -rw-r--r-- 1 root root 0 Feb 23 07:12 dir2_foo

###################
# mount -o bind,ro dir1 dir2
mount: warning: dir2 seems to be mounted read-write.
# mount -o bind,ro,remount dir1 dir2
# mount | grep dir2
/home/bh0322/workspace/mount/dir1 on /home/bh0322/workspace/mount/dir2 type none (ro,bind)
在系統就永遠找不到dir2_foo這個檔案了,除非umount dir2

# ls -li -R
1177191 drwxr-xr-x 2 root root 4096 Feb 23 07:11 dir1
1177191 drwxr-xr-x 2 root root 4096 Feb 23 07:11 dir2
./dir1:
1085818 -rw-r--r-- 1 root root 0 Feb 23 07:11 dir1_foo
./dir2:
1085818 -rw-r--r-- 1 root root 0 Feb 23 07:11 dir1_foo

###################
Symbolic link
1. symbolic link 有自己的 inode、檔案和屬性等
2. 可以對不存在的檔案或目錄建立 symbolic link
3. 可以對不同檔案系統或掛載點下的檔案或目錄建立 symbolic link
4. 刪除 symbolic link 不會影響被連結的檔案或目錄;但如果連結的檔案或目錄被删除,symbolic link 會存取錯誤

Hard link
1. 跟被連結的檔案或目錄有相同的 inode、檔案 和屬性等
2. 只能對存在的文件檔案或目錄建立 hard link
3. 不能對不同檔案系統或掛載點下的檔案或目錄建立 hard link
4. 不能目錄建立 hard link
5. 删除 hard link 不會影響被連結的檔案或目錄;但如果連結的檔案或目錄被删除,hard link 仍然可以讀寫
# ln -s dir1 dir3
# ln dir1 dir4
ln: ‘dir1’: hard link not allowed for directory
# ls -li -R
1177191 drwxr-xr-x 2 root root 4096 Feb 23 07:11 dir1
1177191 drwxr-xr-x 2 root root 4096 Feb 23 07:11 dir2
393735 lrwxrwxrwx 1 root root    4 Feb 23 07:12 dir3 -> dir1
./dir1:
1085818 -rw-r--r-- 1 root root 0 Feb 23 07:11 dir1_foo
./dir2:
1085818 -rw-r--r-- 1 root root 0 Feb 23 07:11 dir1_foo

###################
# rm -rf dir2
rm: cannot remove ‘dir2’: Device or resource busy
裡面的檔案都被rm只剩dir2
rm: cannot remove ‘dir2/dir1_foo’: Read-only file system

在 Linux 是可以的。但 bind mount 檔案或 bind mount 到 的 徑上有 麼優點?前 說到 bind mounts 跟 hard link 很像,但 bind mounts 是掛載。除 沒有卸載無法刪除以外,也同樣可以使  mount 的 option, 如:ro、noexec、nouser、nosuid 等,在檔案系統的權限外多增加 增保護。

###################
# strace ln a.txt c.txt
symlink("a.txt", "b.txt")               = 0

# strace ln -s a.txt b.txt
lstat("a.txt", {st_mode=S_IFREG|0664, st_size=6, ...}) = 0
linkat(AT_FDCWD, "a.txt", AT_FDCWD, "c.txt", 0) = 0

參考資料:
https://lwn.net/Articles/281157/
https://wiki.archlinux.org/index.php/Fstab_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87)