回覆列表
  • 1 # 使用者9401192970495

    tcpdump是透過libpcap來抓取報文的,libpcap在不同平臺有不同的實現,下面僅以Linux平臺來作說明。首先Linux平臺在使用者態獲取報文的Mac地址等鏈路層資訊並不是什麼特殊的事情,透過AF_PACK套接字就可以實現,而tcpdump或libpcap也正是用這種方式抓取報文的(可以strace tcpdump的系統呼叫來驗證)。關於AF_PACK的細節,可檢視man 7 packet。其次,上面已經提到tcpdumap使用的是AF_PACK套接字,不是Netfilter。使用Netfilter至少有2點不合理的地方:

    1. 資料包進入Netfilter時其實已經在協議棧做過一些處理了,資料包可能已經發生一些改變了。比較明顯的一個例子,進入Netfilter前需要重組分片,所以Netfilter中無法抓取到原始的報文分片。而在傳送方向,報文離開Netfilter時也未完全結束協議棧的處理,所以抓取到的報文也會有不完整的可能。

    2. 在Netfilter抓取的報文,向用戶態遞送時也會較為複雜。Netfilter的程式碼處在中斷上下文和程序上下文兩種執行環境,無法使用傳統系統呼叫,簡單的做法就是使用Netlink。而這還不如直接用AF_PACKET抓取報文來得簡單(對核心和使用者態程式都是如此)。

  • 2 # 使用者1465424935672

    1、開源的sip伺服器端,比較好用的是Asterisk,標準C程式實現,程式碼清晰。

    2、sip的client相對比較多,主要有exosip,pjsip和opal。exosip簡單易用,在PC上用比較方便。但是涉及的相關資源太多,用了osip,srtp,ms2等眾多的開源庫,ms2下面還用到了ffmpeg,別的不說,光編譯就是噩夢。opal功能最強,雖然也用到了ffmpeg ,但是自己封裝的非常好,採用外掛方式,呼叫靈活。opal採用class方式提供封裝,介面非常友好。感覺唯一不爽的地方,就是低層使用了ptlib,雖然多平臺下都很好用,但放在嵌入式下感覺稍龐大了一些。pjsip精巧,方便移植,嵌入式下應該是首選。不過影片頻支援方面擴充套件起來比opal麻煩。個人感覺,對於windows開發者來說,pjsip最大的好處就是程式碼除錯方便。整個工程一次編譯透過,另外兩個庫還要找很多相關的資源

    3、其他的一些協議棧也除錯過,比如reSipphone,好象是這個名字,還有Yate,不過從快速開發角度看,都不太合適。現在搞sip開發的,一開始就是先找好協議棧。linphone,ekiga什麼的,但龐大。對於剛開始做的,最好是一個精簡的demo。後來找到pjsip下面的幾個例子,慢慢地瞭解了sip的工作流程,當然少不了抓包工具和tcpdump。

    不過,其實,sip沒有想象中的那麼麻煩。現在回頭看,剛開始做專案,使用協議棧絕對不是好想法。如果換個方向,先熟悉SIP基本協議,然後自己改造一個,或完全寫一個,可能效果更好。

  • 中秋節和大豐收的關聯?
  • 右後腰隱痛是為何?