原创 strict alias 的含義

Alias 的定義 一個指針叫做另一個指針的 alias (別名)如果這兩個指針都指向相同的地址或對象。 在C99標準裏,建立一個與原類型不同的別名是非法的。這叫做 strict aliasing 規則。這條規則在GCC的-O2級別以會自

原创 隨機選擇一個文件

做選擇是很困難的。  有時有這樣的需要,一個目錄下有一大堆想看的文件,不想記住哪個已經看過了、哪個沒有看過,只想快速選擇一個文件,而且每個文件被選中的機會是一樣的。 於是寫了這樣一個BASH腳本。  它的基本思路是先生成文件列表,然後產生

原创 在 Linux 下安裝機器學習軟件環境

摘要 我使用的是Debian GNU/Linux 發行版。 需要安裝Anaconda, 其中包括numpy, pandas, scikit-learn 和 keras 等與機器學習相關的模塊。 然後再安裝pycharm, 這是一

原创 從Linux內核模塊嚮應用發信號

從Linux內核模塊嚮應用發信號 有一個客戶有這樣的需求,要從設備驅動/內核模塊嚮應用程序發信號,我在網上找了資料,並做了一個測試用例,證明是可行的。 這裏的關鍵是內核模塊要找到相應的應用程序的進程號, 這可以通過 ioctl 函數把

原创 被遺忘的C結構體打包技術

原文見 http://www.catb.org/esr/structure-packing/ 。 作者是著名hacker。 雖然講的是C語言中一個很基本的概念,但條理清楚,讀後仍能獲得不少啓發。 特別是文

原创 如何調試處於D狀態的進程

D 狀態的就是 uninterruptible sleep ,此時進程不能被信號喚醒,GDB等調試工具也不能對它調試,因爲GDB也是用到了信號,也殺不死它,只有系統重啓才能消除它。 這篇文件描述瞭如何利用 /proc/ 目錄下的信息來

原创 一個TCP發送小數據延遲的問題

客戶的一個TCP程序在空閒的時候,每200毫秒發送端會發送8個字節的心跳。 發現有近3秒的時 間不發送這種心跳, 業務只好把socket關了,關閉的時候,發現有13個心跳數 據合在一起發送。 我查了一下TCP發送代碼(tcp_out

原创 如何模擬IP分片到達主機的先後順序

客戶遇到一個IP分片被丟棄的問題,覺得如果IP分片的第二個分片先於第一個分 片到達,會被丟棄。 我認爲不會出現這種情況。 我做了實驗。 先在一臺主機上建立了一個server,在一個固定端口上接收UDP數據。 在 Linux 上這樣發送數

原创 IPv6 地址的 tentative 狀態

rfc4862 裏有詳細描述, IPv6 地址處在這種狀態時,地址的唯一性還沒有確定, 收到的包都會被丟棄。 一個客戶遇到過這樣的問題,板子上的網絡接口在某種情況 下會 down 再 up,此時有一個UDP數據報被丟棄了, 就是因爲

原创 使用 icecream 進行分佈式編譯

icecream 是一個分佈式編譯工具, 它的實現思想是一臺主控制機加上若干臺工作站,主控機把編譯任務分配給工作站,主控機會根據工作站CPU的空閒情況進行分配,這樣比較合理。 而且,主控機和工作站會自己進行網絡通訊,從而知道網絡內有多少臺

原创 發包利器scapy

發包利器scapy 最近在幫助用戶調試一個網絡問題的時候,發現一個很好用的發包工具scapy,記錄一下使用方法。 我們在調試TCP/IP時, 有時需要發送一些報文,用的工具一般有ping, nping, netcat 等。 如果需要再深入

原创 IPv6 源地址選擇規則

網絡拓撲: 一個網關, 一臺PC,和一塊跑vxworks的單板。 PC處在3001::/64網段, 單板處在2001:db8:1234:5::1::/64 網段, 而網關同處在這兩個網段裏。 PC的配置: 是一臺Linux, 要配IPv

原创 TCP options

我一直沒有注意到TCP options,以爲TCP的頭永遠是20字節。 TCP頭裏有一個 4bit的域,指明瞭TCP options 的長度, 單位是32bit,這樣最多可以有60字節 的options。 有以下幾種options:

原创 用 iptables 模擬網絡丟包

有時候我們需要模擬網絡丟包,可以用一臺Linux 作爲網絡通信的一方或網關, 在Linux上用 iptables 創建防火牆規則, 阻止某些包,而規則的有效時間是一個隨機值,到了預期時間,把規則刪除。 如此循環。 用腳本語言很容易實現。 

原创 用Python做數據分析初探(二)

Juypter Notebook 簡介 Juypter Notebook 是一個基於瀏覽器的交互式開發環境, 在寫代碼的同時還可以做寫標題做註釋等, 所有這些可以保存成一個文件, 好像一個筆記,所以叫Notebook。 Anaconda