導航:首頁 > 網路安全 > 網路數據是如何找到對應進程的

網路數據是如何找到對應進程的

發布時間:2023-02-02 20:08:48

㈠ win10怎麼查看應用程序的網路數據使用量

您指的是即使的網路設備佔用還是流量的統計?
即時的可以在任務管理器里查看單個進程的
總計可以在 設置(可在操作中心裡找到)>網路和Internet>數據使用量>使用量詳細信息 里查看

㈡ 網路通信

我們要理解網路中進程如何通信,得解決兩個問題:
a、我們要如何標識一台主機,即怎樣確定我們將要通信的進程是在那一台主機上運行。
b、我們要如何標識唯一進程,本地通過pid標識,網路中應該怎樣標識?
解決辦法:
a、TCP/IP協議族已經幫我們解決了這個問題,網路層的「ip地址」可以唯一標識網路中的主機
b、傳輸層的「協議+埠」可以唯一標識主機中的應用程序(進程),因此,我們利用三元組(ip地址,協議,埠)就可以標識網路的進程了,網路中的進程通信就可以利用這個標志與其它進程進行交互

以UDP傳輸為例:

1、物理層:
解決兩個硬體之間怎麼通信的問題,常見的物理媒介有光纖、電纜、中繼器等。它主要定義物理設備標准,如網線的介面類型、光纖的介面類型、各種傳輸介質的傳輸速率等。

它的主要作用是傳輸比特流(就是由1、0轉化為電流強弱來進行傳輸,到達目的地後在轉化為1、0,也就是我們常說的數模轉換與模數轉換)。這一層的數據叫做比特。

2、數據鏈路層:
計算機網路中由於各種干擾的存在,物理鏈路是不可靠的。該層的主要功能就是:通過各種控制協議,將有差錯的物理信道變為無差錯的、能可靠傳輸數據幀的數據鏈路。

它的具體工作是接收來自物理層的位流形式的數據,並封裝成幀,傳送到上一層;同樣,也將來自上層的數據幀,拆裝為位流形式的數據轉發到物理層。這一層的數據叫做幀。

3、網路層:
計算機網路中如果有多台計算機,怎麼找到要發的那台?如果中間有多個節點,怎麼選擇路徑?這就是路由要做的事。

該層的主要任務就是:通過路由選擇演算法,為報文(該層的數據單位,由上一層數據打包而來)通過通信子網選擇最適當的路徑。這一層定義的是IP地址,通過IP地址定址,所以產生了IP協議。

4、傳輸層:
當發送大量數據時,很可能會出現丟包的情況,另一台電腦要告訴是否完整接收到全部的包。如果缺了,就告訴丟了哪些包,然後再發一次,直至全部接收為止。

簡單來說,傳輸層的主要功能就是:監控數據傳輸服務的質量,保證報文的正確傳輸。

5、會話層:
雖然已經可以實現給正確的計算機,發送正確的封裝過後的信息了。但我們總不可能每次都要調用傳輸層協議去打包,然後再調用IP協議去找路由,所以我們要建立一個自動收發包,自動定址的功能。於是會話層出現了:它的作用就是建立和管理應用程序之間的通信。

6、表示層:
表示層負責數據格式的轉換,將應用處理的信息轉換為適合網路傳輸的格式,或者將來自下一層的數據轉換為上層能處理的格式。

7、應用層:
應用層是計算機用戶,以及各種應用程序和網路之間的介面,其功能是直接向用戶提供服務,完成用戶希望在網路上完成的各種工作。前端同學對應用層肯定是最熟悉的。

應用層(應用,表示,會話):TFTP,HTTP,SNMP,FTP,SMTP,DNS,Telnet 等等
傳輸層:TCP,UDP
網路層:IP,ICMP,OSPF,EIGRP,IGMP
數據鏈路層:SLIP,CSLIP,PPP,MTU
重要的 協議族介紹:

IP 定義了 TCP/IP 的地址,定址方法,以及路由規則。現在廣泛使用的 IP 協議有 IPv4 和 IPv6 兩種:IPv4 使用 32 位二進制整數做地址,一般使用點分十進制方式表示,比如 192.168.0.1。
IP 地址由兩部分組成,即網路號和主機號。故一個完整的 IPv4 地址往往表示 為 192.168.0.1/24 或192.168.0.1/255.255.255.0 這種形式。
IPv6 是為了解決 IPv4 地址耗盡和其它一些問題而研發的最新版本的 IP。使用 128 位 整數表示地址,通常使用冒號分隔的十六進制來表示,並且可以省略其中一串連續的 0,如:fe80::200:1ff:fe00:1。
目前使用並不多!

http協議對應於應用層,tcp協議對應於傳輸層,ip協議對應於網路層。
TPC/IP【TCP(傳輸控制協議)和IP(網際協議)】,主要解決數據如何在網路中傳輸,而HTTP是應用層協議,主要解決如何包裝數據。關於TCP/IP和HTTP協議的關系,網路有一段比較容易理解的介紹:「我們在傳輸數據時,可以只使用(傳輸層)TCP/IP協議,但是那樣的話,如果沒有應用層,便無法識別數據內容,如果想要使傳輸的數據有意義,則必須使用到應用層協議,應用層協議有很多,比如HTTP、FTP、TELNET等,也可以自己定義應用層協議。WEB使用HTTP協議作應用層協議,以封裝HTTP 文本信息,然後使用TCP/IP做傳輸層協議將它發到網路上。」
術語TCP/IP代表傳輸控制協議/網際協議,指的是一系列協議。「IP」代表網際協議,TCP和UDP使用該協議從一個網路傳送數據包到另一個網路。把IP想像成一種高速公路,它允許其它協議在上面行駛並找到到其它電腦的出口。TCP和UDP是高速公路上的「卡車」,它們攜帶的貨物就是像HTTP,文件傳輸協議FTP這樣的協議等。
你應該能理解,TCP和UDP是FTP,HTTP和SMTP之類使用的傳輸層協議。雖然TCP和UDP都是用來傳輸其他協議的,它們卻有一個顯著的不同:TCP提供有保證的數據傳輸,而UDP不提供。這意味著TCP有一個特殊的機制來確保數據安全的不出錯的從一個端點傳到另一個端點,而UDP不提供任何這樣的保證。

URL的全稱是Uniform Resource Locator(統一資源定位符)
通過1個URL,能找到互聯網上唯一的1個資源。
URL就是資源的地址、位置,互聯網上的每個資源都有一個唯一的URL。

URL的基本格式 =協議://主機地址/路徑
協議:不同的協議,代表著不同的資源查找方式、資源傳輸方式
主機地址:存放資源的主機(伺服器)的IP地址(域名)
資源在主機(伺服器)中的具體位置

1、HTTP協議的幾個重要概念
1.連接(Connection):一個傳輸層的實際環流,它是建立在兩個相互通訊的應用程序之間。
2.消息(Message):HTTP通訊的基本單位,包括一個結構化的八元組序列並通過連接傳輸。
3.請求(Request):一個從客戶端到伺服器的請求信息包括應用於資源的方法、資源的標識符和協議的版本號
4.響應(Response):一個從伺服器返回的信息包括HTTP協議的版本號、請求的狀態(例如「成功」或「沒找到」)和文檔的MIME類型。
5.資源(Resource):由URI標識的網路數據對象或服務。
6.實體(Entity):數據資源或來自服務資源的回映的一種特殊表示方法,它可能被包圍在一個請求或響應信息中。一個實體包括實體頭信息和實體的本身內容。
7.客戶機(Client):一個為發送請求目的而建立連接的應用程序。
8.用戶代理(Useragent):初始化一個請求的客戶機。它們是瀏覽器、編輯器或其它用戶工具。
9.伺服器(Server):一個接受連接並對請求返回信息的應用程序。
10.源伺服器(Originserver):是一個給定資源可以在其上駐留或被創建的伺服器。
11.代理(Proxy):一個中間程序,它可以充當一個伺服器,也可以充當一個客戶機,為其它客戶機建立請求。請求是通過可能的翻譯在內部或經過傳遞到其它的伺服器中。一個代理在發送請求信息之前,必須解釋並且如果可能重寫它。
代理經常作為通過防火牆的客戶機端的門戶,代理還可以作為一個幫助應用來通過協議處理沒有被用戶代理完成的請求。
12.網關(Gateway):一個作為其它伺服器中間媒介的伺服器。與代理不同的是,網關接受請求就好象對被請求的資源來說它就是源伺服器;發出請求的客戶機並沒有意識到它在同網關打交道。
網關經常作為通過防火牆的伺服器端的門戶,網關還可以作為一個協議翻譯器以便存取那些存儲在非HTTP系統中的資源。
13.通道(Tunnel):是作為兩個連接中繼的中介程序。一旦激活,通道便被認為不屬於HTTP通訊,盡管通道可能是被一個HTTP請求初始化的。當被中繼的連接兩端關閉時,通道便消失。當一個門戶(Portal)必須存在或中介(Intermediary)不能解釋中繼的通訊時通道被經常使用。
14.緩存(Cache):反應信息的局域存儲。

TCP(Transmission Control Protocol) 傳輸控制協議。TCP是主機對主機層的傳輸控制協議,提供可靠的連接服務,採用三次握確認建立一個連接。位碼即tcp標志位,有6種 標示:SYN(synchronous建立聯機) ACK(acknowledgement 確認) PSH(push傳送) FIN(finish結束) RST(reset重置) URG(urgent緊急)Sequence number(順序號碼) Acknowledge number(確認號碼)。

手機能夠使用聯網功能是因為手機底層實現了TCP/IP協議,可以使手機終端通過無線網路建立TCP連接。TCP協議可以對上層網路提供介面,使上層網路數據的傳輸建立在「無差別」的網路之上。建立起一個TCP連接需要經過「三次握手」:

第一次握手:客戶端發送syn包(syn=j)到伺服器,並進入SYN_SEND狀態,等待伺服器確認;

第二次握手:伺服器收到syn包,必須確認客戶的SYN(ack=j+1),同時自己也發送一個SYN包(syn=k),即SYN+ACK包,此時伺服器進入SYN_RECV狀態;

第三次握手:客戶端收到伺服器的SYN+ACK包,向伺服器發送確認包ACK(ack=k+1),此包發送完畢,客戶端和伺服器進入ESTABLISHED狀態,完成三次握手。握手完成後,兩台主機開始傳輸數據了。

什麼要三次握手?

如果只有一次握手,Client不能確定與Server的單向連接,更加不能確定Server與Client的單向連接;
如果只有兩次握手,Client確定與Server的單向連接,但是Server不能確定與Client的單向連接;
只有三次握手,Client與Server才能相互確認雙向連接,實現雙工數據傳輸。

握手過程中傳送的包里不包含數據,三次握手完畢後,客戶端與伺服器才正式開始傳送數據。理想狀態下,TCP連接一旦建立,在通信雙方中的任何一方主動關閉連接之前,TCP 連接都將被一直保持下去。斷開連接時伺服器和客戶端均可以主動發起斷開TCP連接的請求,斷開過程需要經過「四次揮手」。

第一次揮手:
Client發送一個FIN,用來關閉Client到Server的數據傳送,Client進入FIN_WAIT_1狀態。
第二次揮手:
Server收到FIN後,發送一個ACK給Client,確認序號為收到序號+1(與SYN相同,一個FIN佔用一個序號),Server進入CLOSE_WAIT狀態。
第三次揮手:
Server發送一個FIN,用來關閉Server到Client的數據傳送,Server進入LAST_ACK狀態。
第四次揮手:
Client收到FIN後,Client進入TIME_WAIT狀態,接著發送一個ACK給Server,確認序號為收到序號+1,Server進入CLOSED狀態,完成四次揮手。

為什麼要四次揮手?

「三次握手」的第二次握手發送SYN+ACK回應第一次握手的SYN,但是「四次揮手」的第二次揮手只能發送ACK回應第一次揮手的FIN,因為此時Server可能還有數據傳輸給Client,所以Server傳輸數據完成後才能發起第三次揮手發送FIN給Client,等待Client的第四次揮手ACK。

http是超文本傳輸協議,信息是明文傳輸,https 則是具有安全性的ssl加密傳輸協議。HTTPS其實是有兩部分組成:HTTP +SSL/ TLS,也就是在HTTP上又加了一層處理加密信息的模塊。採用HTTPS協議的伺服器必須要有一套數字證書,可以自己製作,也可以向組織申請。區別就是自己頒發的證書需要客戶端驗證通過,才可以繼續訪問,而使用受信任的公司申請的證書則不會彈出提示頁面(startssl就是個不錯的選擇,有1年的免費服務)。這套證書其實就是一對公鑰和私鑰。SSL介於應用層和TCP層之間。應用層數據不再直接傳遞給傳輸層,而是傳遞給SSL層,SSL層對從應用層收到的數據進行加密,並增加自己的SSL頭。

1.怎麼解決tcp拆包和黏包的問題
粘包、拆包發生原因
發生TCP粘包或拆包有很多原因,現列出常見的幾點,可能不全面,歡迎補充,
1、要發送的數據大於TCP發送緩沖區剩餘空間大小,將會發生拆包。
2、待發送數據大於MSS(最大報文長度),TCP在傳輸前將進行拆包。
3、要發送的數據小於TCP發送緩沖區的大小,TCP將多次寫入緩沖區的數據一次發送出去,將會發生粘包。
4、接收數據端的應用層沒有及時讀取接收緩沖區中的數據,將發生粘包。
等等。

粘包、拆包解決辦法
解決問題的關鍵在於如何給每個數據包添加邊界信息,常用的方法有如下幾個:

1、發送端給每個數據包添加包首部,首部中應該至少包含數據包的長度,這樣接收端在接收到數據後,通過讀取包首部的長度欄位,便知道每一個數據包的實際長度了。
2、發送端將每個數據包封裝為固定長度(不夠的可以通過補0填充),這樣接收端每次從接收緩沖區中讀取固定長度的數據就自然而然的把每個數據包拆分開來。
3、可以在數據包之間設置邊界,如添加特殊符號,這樣,接收端通過這個邊界就可以將不同的數據包拆分開。
等等。

2.upd丟包
1、接收端處理時間過長導致丟包:調用recv方法接收端收到數據後,處理數據花了一些時間,處理完後再次調用recv方法,在這二次調用間隔里,發過來的包可能丟失。對於這種情況可以修改接收端,將包接收後存入一個緩沖區,然後迅速返回繼續recv。

2、發送的包巨大丟包:雖然send方法會幫你做大包切割成小包發送的事情,但包太大也不行。例如超過50K的一個udp包,不切割直接通過send方法發送也會導致這個包丟失。這種情況需要切割成小包再逐個send。

3、發送的包較大,超過接受者緩存導致丟包:包超過mtu size數倍,幾個大的udp包可能會超過接收者的緩沖,導致丟包。這種情況可以設置socket接收緩沖。以前遇到過這種問題,我把接收緩沖設置成64K就解決了。

int nRecvBuf=32*1024;//設置為32K

setsockopt(s,SOL_SOCKET,SO_RCVBUF,(const char*)&nRecvBuf,sizeof(int));

4、發送的包頻率太快:雖然每個包的大小都小於mtu size 但是頻率太快,例如40多個mut size的包連續發送中間不sleep,也有可能導致丟包。這種情況也有時可以通過設置socket接收緩沖解決,但有時解決不了。所以在發送頻率過快的時候還是考慮sleep一下吧。

5、區域網內不丟包,公網上丟包。這個問題我也是通過切割小包並sleep發送解決的。如果流量太大,這個辦法也不靈了。總之udp丟包總是會有的,如果出現了用我的方法解決不了,還有這個幾個方法: 要麼減小流量,要麼換tcp協議傳輸,要麼做丟包重傳的工作。

一個是客戶端發送過快,網路狀況不好或者超過伺服器接收速度,就會丟包。

第二個原因是伺服器收到包後,還要進行一些處理,而這段時間客戶端發送的包沒有去收,造成丟包。

那麼需要做的是

客戶端降低發送速度,可以等待回包,或者加一些延遲。伺服器部分單獨開一個線程,去接收UDP數據,存放在一個緩沖區中,又另外的線程去處理收到的數據,盡量減少因為處理數據延時造成的丟包。

有兩種方法解決UDP 丟包的問題:

方法一:重新設計一下協議,增加接收確認超時重發。(推薦)

方法二:在接收方,將通信和處理分開,增加個應用緩沖區;如果有需要增加接收socket的系統緩沖區。(本方法不能從根本解決問題,只能改善)

https://jiahao..com/s?id=1654225744653405133&wfr=spider&for=pc
https://www.jianshu.com/p/066d99da7cbd
https://jiahao..com/s?id=1654225744653405133&wfr=spider&for=pc
https://blog.csdn.net/qq_31337311/article/details/80781273
https://www.cnblogs.com/jiangzhaowei/p/8996810.html
http://blog.sina.com.cn/s/blog_d2bb5eff0102wbq2.html

㈢ 請教下:網路數據傳輸的原理

數據在網路上是以"幀"為單位進行傳輸。
幀由多個部分組成,不同的部分對應不同的信息,從而實現相應的功能。
幀是根據通信所使用的協議,由網路驅動程序按照一定規則生成的,然後通過網卡發送到網路中,通過網線傳送到目的主機。
在目的主機一端按照同樣的通信協議執行相反的過程。接收端機器的網卡捕獲到這些幀,並告訴操作系統有新的幀到達,然後對其進行存儲。
在正常情況下,網卡讀入一幀並進行檢查。
如果幀中攜帶的目的地址(這里的目的地址是指物理地址而非IP地址,該地址是網路設備的唯一標志)和自己的物理地址一致,或者是廣播地址(被設定為一次性發送到網路所有主機的特殊地址,當目標地址為該地址時,所有的網卡都會接收該幀),網卡通過產生一個硬體中斷引起操作系統注意,然後將幀中所包含的數據傳送給系統進一步處理;否則就將這個幀丟棄。

㈣ linux如何獲得一個進程的網路流量

Linux下是沒有文件直接給你按進程記錄流量信息的。你想要編程實現的話,辦法是有的,只是比較麻煩。首先,你需要能截取流經網卡的數據包,這個可以通過libpcap來完成,其次你要完成的最重要的一步就是怎麼根據埠號找到進程的pid。埠號通過截取的數據包可以獲得,這個時候你要按行來解析/proc/net/tcp (如果要支持ipv6的話還要解析/proc/net/tcp6),這個文件記錄了當前活躍的TCP連接情況,每一行代表一條連接,我們感興趣的是其中的inode這一項,你得把inode的值解析出來保存。然後蛋疼的時候來了,接下來你得遍歷所有的/proc/pid/fd文件,察看其中每一個文件描述符,如果發現內容為socket[xxxx]的,把xxxx截取出來,這個xxxx也是inode號,如果和你之前解析/proc/net/tcp的inode號吻合,恭喜你,這說明這個pid和那個tcp連接有關系,進而也就確定了埠號和pid的對應關系,也就知道了數據包和進程之間的對應關系了。


我的建議:

  1. 先看看http://www.tcpmp.org/pcap.html, 熟悉一下libpcap庫的用法,怎麼截取數據包。

  2. 自己看看/proc/net/tcp的內容,想想怎麼做文本解析,除了inode外,源ip,源埠號,目的ip,目的埠號都可以解析出來,而這個四元組實際就代表了一條tcp連接。

  3. 想想怎麼做數據包,連接,進程的老化超時處理。比如說,當前截取的到的數據包在統計過一次流量後,下一次就不應該再計入了,怎麼處理?一條連接長時間沒有任何數據包的交互,怎麼老化掉?一個進程長時間沒有數據包的交互,甚至用戶給關閉了,你的程序如何感知?libpcap截取到數據包後會給你提供截取到的時間戳,好好利用這個時間戳就可以辦到。

  4. 最後,以數據包 -> 連接 -> 進程 的關系來思考會有助於你的程序設計,一條連接可以有N個數據包,一個進程可以有N條連接。這么一想,這3個結構體或者類就能定義好了。剩下的自己琢磨琢磨。

㈤ 求一款能夠發現是哪個程序或進程在向網路發送數據或接收數據的軟體!謝謝!

PSP終結者

㈥ 如何實現網間進程通信

網間進程通信首先必須解決以下問題。
(1)網間進程的標識問題。在同一主機中,不同的進程可以用進程號(Process ID)唯一標識。
但在網路環境下,各主機獨立分配的進程號已經不能唯一地標識一個進程。例如,主機A中某進
程的進程號是5,在B機中也可以存在5號進程,進程號不再唯一了,因此,在網路環境下,僅
僅說「5號進程」就沒有意義了。
(2)與網路協議棧連接的問題。網間進程的通信實際是藉助網路協議棧實現的。應用進程
把數據交給下層的傳輸層協議實體,調用傳輸層提供的傳輸服務,傳輸層及其下層協議將數
據層層向下遞交,最後由物理層將數據變為信號,發送到網上,經過各種網路設備的尋徑和
存儲轉發.才能到達目的端主機,目的端的網路協議棧再將數據層層上傳,最終將數據送交
接收端的應用進程,這個過程是非常復雜的。但是對於網路編程來說,必須要有一種非常簡
單的方法,來與網路協議棧連接。這個問題是通過定義套接字網路編程介面來解決的。
(3)多重協議的識別問題。現行的網路體系結構有很多,如TCP/IP. IPX/SPX等,操作系統
往往支持眾多的網路協議。不同協議的工作方式不同,地址格式也不同,因此網間進程通信還要解
決多重協議的識別問題。
(4)不同的通信服務的問題。隨著網路應用的不同,網間進程通信所要求的通信服務就會
有不同的要求。例如,文件傳輸服務,傳輸的文件可能很大,要求傳輸非常可靠,無差錯,無
亂序,無丟失;下載了一個程序,如果丟了幾個位元組,這個程序可能就不能用了。但對於網上
聊天這樣的應用,要求就不高。因此,要求網路應用程序能夠有選擇地使用網路協議棧提供的
網路通信服務功能。在TCP/IP協議簇中,在傳輸層有TCP和UDP這兩個協議,TCP提供可靠
的數據流傳輸服務,UDP提供不可靠的數據報傳輸服務。深入了解它們的工作機制,對於網路
編程是非常必要的。
具體請看http://www.zhaojing520.com/thread-214-1-1.html?_dsign=9cd875fb

㈦ 用winpcap捕獲數據包,如何找出對應的進程

你可以先將你抓到的包保存到文件
主要代碼:
/* 回調函數,用來處理數據包 */
void packet_handler(u_char *mpfile, const struct pcap_pkthdr *header, const u_char *pkt_data)
{
/* 保存數據包到堆文件 */
pcap_mp(mpfile, header, pkt_data);
}

然後用wireshark 這款軟體,打開文件你保存抓包信息的文件,查看你抓到的包
Wireshark(前稱Ethereal)是一個網路封包分析軟體。

㈧ Linux下用 lsof 命令查找指定埠被哪個進程佔用

lsof(list open files)是一個列出當前系統打開文件的工具。在Linux環境下,任何事物都以文件的形式存在,通過文件不僅僅可以訪問常規數據,還可以訪問網路連接 和硬體。所以如傳輸控制協議 (tcp) 和用戶數據報協議 (udp) 套接字等,系統在後台都為該應用程序分配了一個文件描述符,無論這個文件的本質如何,該文件描述符為應用程序與基礎操作系統之間的交互提供了通用介面。因 為應用程序打開文件的描述符列表提供了大量關於這個應用程序本身的信息,因此通過lsof工具能夠查看這個列表對系統監測以及排錯將是很有幫助的。
lsof使用
lsof輸出信息含義:
在終端下輸入lsof即可顯示系統打開的文件,因為 lsof 需要訪問核心內存和各種文件,所以必須以 root 用戶的身份運行它才能夠充分地發揮其功能。
command pid user fd type device size node name
init 1 root cwd dir 3,3 1024 2 /
init 1 root rtd dir 3,3 1024 2 /
init 1 root txt reg 3,3 38432 1763452 /sbin/init
init 1 root mem reg 3,3 106114 1091620 /lib/libdl-2.6.so
init 1 root mem reg 3,3 7560696 1091614 /lib/libc-2.6.so
init 1 root mem reg 3,3 79460 1091669 /lib/libselinux.so.1
init 1 root mem reg 3,3 223280 1091668 /lib/libsepol.so.1
init 1 root mem reg 3,3 564136 1091607 /lib/ld-2.6.so
init 1 root 10u fifo 0,15 1309 /dev/initctl

每行顯示一個打開的文件,若不指定條件默認將顯示所有進程打開的所有文件。lsof輸出各列信息的意義如下:
command:進程的名稱
pid:進程標識符
user:進程所有者
fd:文件描述符,應用程序通過文件描述符識別該文件。如cwd、txt等
type:文件類型,如dir、reg等
device:指定磁碟的名稱
size:文件的大小
node:索引節點(文件在磁碟上的標識)
name:打開文件的確切名稱
其中fd 列中的文件描述符cwd 值表示應用程序的當前工作目錄,這是該應用程序啟動的目錄,除非它本身對這個目錄進行更改。txt 類型的文件是程序代碼,如應用程序二進制文件本身或共享庫,如上列表中顯示的 /sbin/init 程序。其次數值表示應用程序的文件描述符,這是打開該文件時返回的一個整數。如上的最後一行文件/dev/initctl,其文件描述符為 10。u 表示該文件被打開並處於讀取/寫入模式,而不是只讀 R 或只寫 w 模式。同時還有大寫 的w 表示該應用程序具有對整個文件的寫鎖。該文件描述符用於確保每次只能打開一個應用程序實例。初始打開每個應用程序時,都具有三個文件描述符,從 0 到 2,分別表示標准輸入、輸出和錯誤流。所以大多數應用程序所打開的文件的 fd 都是從 3 開始。
與 fd 列相比,type 列則比較直觀。文件和目錄分別稱為 reg 和 dir。而chr 和 blk,分別表示字元和塊設備;或者 unix、fifo 和 ipv4,分別表示 unix 域套接字、先進先出 (fifo) 隊列和網際協議 (ip) 套接字。
lsof常用參數
lsof 常見的用法是查找應用程序打開的文件的名稱和數目。可用於查找出某個特定應用程序將日誌數據記錄到何處,或者正在跟蹤某個問題。例如,linux限制了進程能夠打開文件的數目。通常這個數值很大,所以不會產生問題,並且在需要時,應用程序可以請求更大的值(直到某個上限)。如果你懷疑應用程序耗盡了文件描述符,那麼可以使用 lsof 統計打開的文件數目,以進行驗證。lsof語法格式是:
# lsof [options] filename
常用的參數列表:
lsof filename 顯示打開指定文件的所有進程
lsof -a 表示兩個參數都必須滿足時才顯示結果
lsof -c string 顯示command列中包含指定字元的進程所有打開的文件
lsof -u username 顯示所屬user進程打開的文件
lsof -g gid 顯示歸屬gid的進程情況
lsof +d /dir/ 顯示目錄下被進程打開的文件
lsof +d /dir/ 同上,但是會搜索目錄下的所有目錄,時間相對較長
lsof -d fd 顯示指定文件描述符的進程
lsof -n 不將ip轉換為hostname,預設是不加上-n參數
lsof -i 用以顯示符合條件的進程情況
lsof -i[46] [protocol][@hostname|hostaddr][:service|port]
46 --> ipv4 or ipv6
protocol --> tcp or udp
hostname --> internet host name
hostaddr --> ipv4地址
service --> /etc/service中的 service name (可以不只一個)
port --> 埠號 (可以不只一個)
例如: 查看22埠現在運行的情況
# lsof -i :22
command pid user fd type device size node name
sshd 1409 root 3u ipv6 5678 tcp *:ssh (listen)
查看所屬root用戶進程所打開的文件類型為txt的文件:
# lsof -a -u root -d txt
command pid user fd type device size node name
init 1 root txt reg 3,3 38432 1763452 /sbin/init
mingetty 1632 root txt reg 3,3 14366 1763337 /sbin/mingetty
mingetty 1633 root txt reg 3,3 14366 1763337 /sbin/mingetty
mingetty 1634 root txt reg 3,3 14366 1763337 /sbin/mingetty
mingetty 1635 root txt reg 3,3 14366 1763337 /sbin/mingetty
mingetty 1636 root txt reg 3,3 14366 1763337 /sbin/mingetty
mingetty 1637 root txt reg 3,3 14366 1763337 /sbin/mingetty
kdm 1638 root txt reg 3,3 132548 1428194 /usr/bin/kdm
x 1670 root txt reg 3,3 1716396 1428336 /usr/bin/xorg
kdm 1671 root txt reg 3,3 132548 1428194 /usr/bin/kdm
startkde 2427 root txt reg 3,3 645408 1544195 /bin/bash
... ...
lsof使用實例
一、查找誰在使用文件系統
在卸載文件系統時,如果該文件系統中有任何打開的文件,操作通常將會失敗。那麼通過lsof可以找出那些進程在使用當前要卸載的文件系統,如下:
# lsof /gtes11/
command pid user fd type device size node name
bash 4208 root cwd dir 3,1 4096 2 /gtes11/
vim 4230 root cwd dir 3,1 4096 2 /gtes11/
在 這個示例中,用戶root正在其/gtes11目錄中進行一些操作。一個 bash是實例正在運行,並且它當前的目錄為/gtes11,另一個則顯示的是vim正在編輯/gtes11下的文件。要成功地卸載/gtes11,應該 在通知用戶以確保情況正常之後,中止這些進程。 這個示例說明了應用程序的當前工作目錄非常重要,因為它仍保持著文件資源,並且可以防止文件系統被卸載。這就是為什麼大部分守護進程(後台進程)將它們的 目錄更改為根目錄、或服務特定的目錄(如 sendmail 示例中的 /var/spool/mqueue)的原因,以避免該守護進程阻止卸載不相關的文件系統。
二、恢復刪除的文件
當linux計算機受到入侵時,常見的情況是日誌文件被刪除,以掩蓋攻擊者的蹤跡。管理錯誤也可能導致意外刪除重要的文件,比如在清理舊日誌時,意外地刪除了資料庫的活動事務日誌。有時可以通過lsof來恢復這些文件。
當進程打開了某個文件時,只要該進程保持打開該文件,即使將其刪除,它依然存在於磁碟中。這意味著,進程並不知道文件已經被刪除,它仍然可以向打開該文件時提供給它的文件描述符進行讀取和寫入。除了該進程之外,這個文件是不可見的,因為已經刪除了其相應的目錄索引節點。
在/proc 目錄下,其中包含了反映內核和進程樹的各種文件。/proc目錄掛載的是在內存中所映射的一塊區域,所以這些文件和目錄並不存在於磁碟中,因此當我們對這 些文件進行讀取和寫入時,實際上是在從內存中獲取相關信息。大多數與 lsof 相關的信息都存儲於以進程的 pid 命名的目錄中,即 /proc/1234 中包含的是 pid 為 1234 的進程的信息。每個進程目錄中存在著各種文件,它們可以使得應用程序簡單地了解進程的內存空間、文件描述符列表、指向磁碟上的文件的符號鏈接和其他系統信 息。lsof 程序使用該信息和其他關於內核內部狀態的信息來產生其輸出。所以lsof 可以顯示進程的文件描述符和相關的文件名等信息。也就是我們通過訪問進程的文件描述符可以找到該文件的相關信息。
當 系統中的某個文件被意外地刪除了,只要這個時候系統中還有進程正在訪問該文件,那麼我們就可以通過lsof從/proc目錄下恢復該文件的內容。 假如由於誤操作將/var/log/messages文件刪除掉了,那麼這時要將/var/log/messages文件恢復的方法如下:
首先使用lsof來查看當前是否有進程打開/var/logmessages文件,如下:
# lsof |grep /var/log/messages
syslogd 1283 root 2w reg 3,3 5381017 1773647 /var/log/messages (deleted)
從 上面的信息可以看到 pid 1283(syslogd)打開文件的文件描述符為 2。同時還可以看到/var/log/messages已經標記被刪除了。因此我們可以在 /proc/1283/fd/2 (fd下的每個以數字命名的文件表示進程對應的文件描述符)中查看相應的信息,如下:
# head -n 10 /proc/1283/fd/2
aug 4 13:50:15 holmes86 syslogd 1.4.1: restart.
aug 4 13:50:15 holmes86 kernel: klogd 1.4.1, log source = /proc/kmsg started.
aug 4 13:50:15 holmes86 kernel: linux version 2.6.22.1-8 ([email protected]) (gccversion 4.2.0) #1 smp wed jul 18 11:18:32 edt 2007
aug 4 13:50:15 holmes86 kernel: bios-provided physical ram map:
aug 4 13:50:15 holmes86 kernel: bios-e820: 0000000000000000 - 000000000009f000 (usable)
aug 4 13:50:15 holmes86 kernel: bios-e820: 000000000009f000 - 00000000000a0000 (reserved)
aug 4 13:50:15 holmes86 kernel: bios-e820: 0000000000100000 - 000000001f7d3800 (usable)
aug 4 13:50:15 holmes86 kernel: bios-e820: 000000001f7d3800 - 0000000020000000 (reserved)
aug 4 13:50:15 holmes86 kernel: bios-e820: 00000000e0000000 - 00000000f0007000 (reserved)
aug 4 13:50:15 holmes86 kernel: bios-e820: 00000000f0008000 - 00000000f000c000 (reserved)
從上面的信息可以看出,查看 /proc/8663/fd/15 就可以得到所要恢復的數據。如果可以通過文件描述符查看相應的數據,那麼就可以使用 i/o 重定向將其復制到文件中,如:
# cat /proc/1283/fd/2 > /var/log/messages
對於許多應用程序,尤其是日誌文件和資料庫,這種恢復刪除文件的方法非常有用。
# lsof -i:3306
查看3306埠被誰佔用

㈨ Linux 怎麼根據進程號,找對應的進程!

1、Linux根據進程號查詢相應的進程信息,可以使用ps命令的-q參數來進行查詢。

2、舉例來說,已知進程號為12840,查詢其相應的進程。

ps-q12840

說明:-o是指明輸出的格式,comm=即輸出格式只輸出comand,即只顯示進程的名稱。

㈩ 電腦怎樣接收網路數據

網路數據接收依次經過網卡驅動和協議棧程序,以DM9000A網卡為例進行介紹接收數據的過程。
網卡在一個數據包到來時,會產生一個硬中斷,網路驅動程序會執行中斷處理過程:首先申請一個skb結構及pkt_len+5大小的內存用於保存數據,然後便將接收到的數據從網卡復制到這個skb的數據部分中。當數據從網卡中成功接收後,調用netif_rx(skb)進一步處理數據,將skb加入到相應的input_pkt_queue隊列中,並調用netif_rx_schele(),會產生一個軟中斷來執行網路協議棧的常式。這樣,中斷的上半部已完成,以下的工作則交由中斷的下半部來實現。

下半部的內核守護線程do_softirq(),將執行net_rx_action(),對數據進行處理。IP層輸入處理程序輪詢處理輸入隊列中的每個IP數據,在整個隊列處理完畢後返回。IP層驗證IP首部的校驗和,處理IP選項,驗證IP主機地址和正確性等,並調用相應協議(TCP或者UDP等)處理程序。接收的進程在網路協議棧處理完畢後會收到喚醒的信號,並收到發送來的網路數據。

閱讀全文

與網路數據是如何找到對應進程的相關的資料

熱點內容
來邦ip網路適配器怎麼用 瀏覽:598
社交網路中的圖像數據有哪些 瀏覽:666
光信號紅燈閃沒網路 瀏覽:688
網路助理是做什麼 瀏覽:516
移動網路消費值超額 瀏覽:890
初中生作文網路課堂哪個好 瀏覽:896
手機無需網路熱游 瀏覽:908
高恪固件網路共享 瀏覽:796
電腦網路切換重置 瀏覽:743
聯通網路用戶名是多少 瀏覽:209
智能網路無線路由器怎麼設置 瀏覽:271
廈門網路oa雲辦公軟體 瀏覽:526
微機連接網路需要增加什麼硬體 瀏覽:461
幾年檢測網路安全 瀏覽:678
如何網路撥打一個號碼 瀏覽:111
電白網路信號不好 瀏覽:420
網路維護員的對應專業有哪些 瀏覽:944
廣東廣電網路可以連別的wifi嗎 瀏覽:355
具備網路知識有哪些 瀏覽:753
網路盒黃色的不亮了是怎麼回事 瀏覽:275

友情鏈接