新聞中心
在 Linux 系統(tǒng)中,TCP6 監(jiān)聽是指通過(guò) IPv6 協(xié)議監(jiān)聽本地的一個(gè)端口,以接受遠(yuǎn)程客戶端的網(wǎng)絡(luò)請(qǐng)求。TCP6 監(jiān)聽被廣泛應(yīng)用于服務(wù)器程序的開發(fā)中,它可以讓服務(wù)器程序成為一個(gè)網(wǎng)絡(luò)服務(wù),提供對(duì)客戶端的響應(yīng)和處理。

大同網(wǎng)站建設(shè)公司創(chuàng)新互聯(lián),大同網(wǎng)站設(shè)計(jì)制作,有大型網(wǎng)站制作公司豐富經(jīng)驗(yàn)。已為大同成百上千家提供企業(yè)網(wǎng)站建設(shè)服務(wù)。企業(yè)網(wǎng)站搭建\外貿(mào)網(wǎng)站制作要多少錢,請(qǐng)找那個(gè)售后服務(wù)好的大同做網(wǎng)站的公司定做!
本文將從以下幾個(gè)方面詳細(xì)介紹 Linux TCP6 監(jiān)聽的工作原理和使用方法。
一、TCP6 監(jiān)聽的工作原理
TCP6 監(jiān)聽是通過(guò)創(chuàng)建一個(gè)基于 IPv6 協(xié)議的套接字來(lái)實(shí)現(xiàn)的。在 Linux 中,我們可以使用 socket() 系統(tǒng)調(diào)用創(chuàng)建一個(gè) IPv6 套接字,并使用 bind() 系統(tǒng)調(diào)用將套接字綁定到一個(gè)本地端口上。綁定完成后,我們可以使用 listen() 系統(tǒng)調(diào)用讓套接字開始監(jiān)聽客戶端連接請(qǐng)求。
當(dāng)一個(gè)客戶端連接請(qǐng)求到達(dá)套接字時(shí),系統(tǒng)會(huì)將這個(gè)請(qǐng)求放入一個(gè)稱為”待處理連接列表“的隊(duì)列中。這個(gè)隊(duì)列中存儲(chǔ)著所有已經(jīng)建立連接但還未被服務(wù)器程序 accept() 的連接。服務(wù)器程序調(diào)用 accept() 系統(tǒng)調(diào)用時(shí),會(huì)從待處理連接列表中取出一個(gè)連接,并將該連接返回給用戶程序。用戶程序可以使用這個(gè)連接來(lái)和客戶端進(jìn)行通信。
如果待處理連接列表已滿,那么新的連接請(qǐng)求將被系統(tǒng)拒絕。在 Linux 中,我們可以使用 sysctl 命令來(lái)調(diào)整系統(tǒng)對(duì)待處理連接列表的大小。
二、TCP6 監(jiān)聽的使用方法
在 Linux 中,我們可以使用 C 語(yǔ)言編寫程序來(lái)實(shí)現(xiàn) TCP6 監(jiān)聽功能。以下是一個(gè)簡(jiǎn)單的示例程序:
“`c
#include
#include
#include
#include
#include
#include
#include
#define PORT 12345
#define MAX_PENDING_CONNECTIONS 10
int mn() {
int server_sockfd, client_sockfd;
struct sockaddr_in6 server_address, client_address;
socklen_t client_address_len;
char buf[1024];
// create a IPv6 TCP socket
if ((server_sockfd = socket(AF_INET6, SOCK_STREAM, 0))
perror(“fled to create server socket”);
exit(EXIT_FLURE);
}
// bind the socket to a local address
memset(&server_address, 0, sizeof(server_address));
server_address.sin6_family = AF_INET6;
server_address.sin6_port = htons(PORT);
server_address.sin6_addr = in6addr_any;
if (bind(server_sockfd, (struct sockaddr*) &server_address,
sizeof(server_address))
perror(“fled to bind server socket to port”);
exit(EXIT_FLURE);
}
// listen for incoming connections
if (listen(server_sockfd, MAX_PENDING_CONNECTIONS)
perror(“fled to listen on server socket”);
exit(EXIT_FLURE);
}
printf(“Listening on port %d…\n”, PORT);
while (1) {
// accept a new client connection
client_address_len = sizeof(client_address);
if ((client_sockfd = accept(server_sockfd,
(struct sockaddr*) &client_address,
&client_address_len))
perror(“fled to accept client connection”);
exit(EXIT_FLURE);
}
printf(“Accepted a new client connection.\n”);
// read data from client
memset(buf, 0, sizeof(buf));
if (read(client_sockfd, buf, sizeof(buf))
perror(“fled to read from client”);
exit(EXIT_FLURE);
}
printf(“Received data from client: %s”, buf);
// write data back to client
if (write(client_sockfd, “Hello, world!\n”, 14)
perror(“fled to write to client”);
exit(EXIT_FLURE);
}
printf(“Sent data back to client.\n”);
// close the connection
close(client_sockfd);
}
// close the server socket
close(server_sockfd);
return EXIT_SUCCESS;
}
“`
這個(gè)程序?qū)崿F(xiàn)了一個(gè)簡(jiǎn)單的 TCP6 服務(wù)器,它通過(guò)監(jiān)聽本地的 12345 端口,接受客戶端連接,并向客戶端發(fā)送”Hello, world!“的消息。程序的主要流程如下:
– 創(chuàng)建一個(gè)基于 IPv6 的 TCP 套接字;
– 將套接字綁定到本地 12345 端口上;
– 啟動(dòng)監(jiān)聽功能,開始等待客戶端連接請(qǐng)求;
– 當(dāng)一個(gè)客戶端連接上來(lái)時(shí),使用 accept() 函數(shù)接受連接,并讀取從客戶端發(fā)送來(lái)的數(shù)據(jù);
– 向客戶端發(fā)送一條歡迎消息,并關(guān)閉連接。
三、
相關(guān)問(wèn)題拓展閱讀:
- linux怎樣查看安裝的apache
- 【tcp】為什么 netstat 對(duì)某些服務(wù)只顯示了 tcp6 監(jiān)聽端口?
- 怎么樣在終端上查看vnc在linux服務(wù)器上的端口號(hào)
linux怎樣查看安裝的apache
root@raykaeso ~># netstat -ntlp //查看服務(wù)器運(yùn)行的進(jìn)程服務(wù)和監(jiān)聽端口
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp.0.0.1:8005 0.0.0.0:* LISTEN 16725/java
tcp 0 0 0.0.0.0:8009 0.0.0.0:* LISTEN 16725/褲陪java
tcp.0.0.1:.0.0.0:* LISTEN 2138/mongod
tcp 0 0 0.0.0.0:8010 0.0.0.0:* LISTEN 14335/java
tcp 0 0 0.0.0.0:.0.0.0:* LISTEN 859/memcached
tcp 0 0 0.0.0.0:8080 0.0.0.0:* LISTEN 16725/java
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 872/耐森h(huán)ttpd
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 873/sshd
tcp6 0 0 :::3306 :::* LISTEN 23443/mysqld
tcp6 0 0 :::11211 :::* LISTEN 859/memcached
tcp6 0 0 :::22 :::* LISTEN 873/昌純畝sshd
【tcp】為什么 netstat 對(duì)某些服務(wù)只顯示了 tcp6 監(jiān)聽端口?
在 Linux 中,默認(rèn)情況下,AP_ENABLE_V4_MAPPED 是 1,那么 httpd 就會(huì)直接監(jiān)聽 ipv6, 因?yàn)榇苏滞魰r(shí) ipv6 的 socket 能夠處理 ipv4 的請(qǐng)求;
另外,bind() 系統(tǒng)調(diào)用會(huì)對(duì)用戶空間的進(jìn)程透明處理 ipv6 沒(méi)有開啟的情況,此時(shí)會(huì)監(jiān)聽到 ipv4。
netstat 只是很真實(shí)的顯示監(jiān)聽的端口而已,但是需要注意 ipv6 實(shí)際上在 Linux 上也支棗悶沖持 ipv4。
解決tcp6問(wèn)題
Linux中tcp與tcp6區(qū)別是什么?
為什么 netstat 對(duì)某些服務(wù)只顯示了 tcp6 監(jiān)聽端凳殲口?
怎么樣在終端上查看vnc在linux服務(wù)器上的端口號(hào)
一個(gè)概念:在Linux只有只讀文件、只讀目錄,沒(méi)有只讀用戶。迅改
要實(shí)現(xiàn)你這一點(diǎn),得修改整個(gè)系統(tǒng)文件和目錄都為只讀,這樣很不好,危險(xiǎn):
chmod -R/
同時(shí)把登錄用戶(例如:user1)的目錄(目錄是:/home/user1)的權(quán)限改成:
chmod -R/home/user1
這樣的話user1用戶就只有對(duì)這個(gè)系統(tǒng)的只讀權(quán)限了,只是登錄這個(gè)舉灶用戶面臨著一大堆的警告/錯(cuò)誤提正昌扮示。
#netstat -lp|grep -i vnc
(Not all processes could be identified, non-owned process info
will not be shown, you would have to be root to see it all.)
tcp 0 *:*:*LISTEN/Xvnc
tcp 0 *:*:*LISTEN/Xvnc
tcp 0 *:*:*LISTEN/Xvnc
unix STREAM LISTENING07/碼爛Xvnc@/tmp/大模絕.X11-unix/X1
unix STREAM LISTENING07/Xvnc/tmp/.X11-unix/滾姿X1
對(duì)于 Linux 系統(tǒng)管理員來(lái)說(shuō),清楚某個(gè)服務(wù)是否正確地綁定或監(jiān)聽某個(gè)端口,是至關(guān)重要的。如果你需要處理端口相關(guān)的問(wèn)題.
端口是 Linux 系統(tǒng)上特定進(jìn)程之間邏輯連接的標(biāo)識(shí),包括物理端口和軟件端口。由于 Linux 操作系統(tǒng)是一個(gè)軟件,因此本文只討論軟件端口。軟件端口始終與主機(jī)的 IP 地址和相關(guān)的通信協(xié)議相關(guān)聯(lián),因此端口常用于區(qū)分應(yīng)用程序。大部分涉及到網(wǎng)絡(luò)的服務(wù)都必須打開一個(gè)套接字來(lái)監(jiān)聽傳入的網(wǎng)絡(luò)請(qǐng)求,而每個(gè)服務(wù)都使用一個(gè)獨(dú)立的套接字。
方法 1:使用 ss 命令
ss 一般用于轉(zhuǎn)儲(chǔ)套接字統(tǒng)計(jì)信息。它能夠輸出類似于 netstat 輸出的信息,但它可以比其它工具顯示更多的 TCP 信息和狀態(tài)信息。
它還埋冊(cè)可以顯示所有類型的套接字統(tǒng)計(jì)信息,包括 PACKET、TCP、UDP、DCCP、RAW、Unix 域等。
# ss -tnlp | grep sshLISTEN*:22 *:* users:((“sshd”,pid=997,fd=3))LISTEN:::22 :::* users:((“sshd”,pid=997,fd=4))
也可以使用端口號(hào)來(lái)檢查。
# ss -tnlp | grep “:22″LISTEN*:22 *:* users:((“sshd”,pid=997,fd=3))LISTEN:::22 :::* users:((“sshd”,pid=997,fd=4))
方法 2:使用 netstat 命令
netstat 能夠顯彎褲宏示網(wǎng)絡(luò)連接、路由表、接口統(tǒng)計(jì)信息、偽裝連接以及多播成員。
默認(rèn)情況下,netstat 會(huì)列出打開的套接字。如果不指定任何地址族,則會(huì)顯示所有已配置地址族的活動(dòng)套接字。但 netstat 已經(jīng)過(guò)時(shí)了,一般會(huì)使用 ss 來(lái)替代。
# netstat -tnlp | grep sshtcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 997/sshd
tcp6 0 0 :::22 :::* LISTEN 997/sshd
也可以使用端口號(hào)來(lái)檢查。
# netstat -tnlp | grep “:22″tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1208/sshd
tcp6 0 0 :::22 :::* LISTEN 1208/sshd
方法 3:使用 lsof 命令
lsof 能夠列出打開的文件,并列出系統(tǒng)上被進(jìn)程打開的文件的相關(guān)信息。
# lsof -i -P | grep sshCOMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
sshdroot 3u IPvt0 TCP *:22 (LISTEN)sshdroot 4u IPvt0 TCP *:22 (LISTEN)sshdroot 3u IPvt0 TCP vps.2daygeek.com:ssh->103.5.134.167:49902 (ESTABLISHED)
也可以使用端口號(hào)來(lái)檢查。
# lsof -i tcp:22COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
sshd 1208 root 3u IPvt0 TCP *:ssh (LISTEN)sshd 1208 root 4u IPvt0 TCP *:ssh (LISTEN)sshdroot 3u IPvt0 TCP vps.2daygeek.com:ssh->103.5.134.167:49902 (ESTABLISHED)
方法 4:使用 fuser 命令
fuser 工具會(huì)將本地系統(tǒng)上打開了文件的進(jìn)程的進(jìn)程 ID 顯示在標(biāo)準(zhǔn)輸出中純清。
# fuser -v 22/tcpUSER PID ACCESS COMMAND22/tcp: root 1208 F…. sshd
rootF…. sshd
rootF…. sshd
方法 5:使用 nmap 命令
nmap(“Network Mapper”)是一款用于網(wǎng)絡(luò)檢測(cè)和安全審計(jì)的開源工具。它最初用于對(duì)大型網(wǎng)絡(luò)進(jìn)行快速掃描,但它對(duì)于單個(gè)主機(jī)的掃描也有很好的表現(xiàn)。
nmap 使用原始 IP 數(shù)據(jù)包來(lái)確定網(wǎng)絡(luò)上可用的主機(jī),這些主機(jī)的服務(wù)(包括應(yīng)用程序名稱和版本)、主機(jī)運(yùn)行的操作系統(tǒng)(包括操作系統(tǒng)版本等信息)、正在使用的數(shù)據(jù)包過(guò)濾器或防火墻的類型,以及很多其它信息。
# nmap -sV -p 22 localhostStarting Nmap 6.40 ( ) at:36 ISTNmap scan report for localhost (127.0.0.1)Host is up (0.000089s latency).Other addresses for localhost (not scanned): 127.0.0.1PORT STATE SERVICE VERSION22/tcp open ssh OpenSSH 7.4 (protocol 2.0)Service detection performed. Please report any incorrect results at .Nmap done: 1 IP address (1 host up) scanned in 0.44 seconds
方法 6:使用 systemctl 命令
systemctl 是 systemd 系統(tǒng)的控制管理器和服務(wù)管理器。它取代了舊的 SysV 初始化系統(tǒng)管理,目前大多數(shù)現(xiàn)代 Linux 操作系統(tǒng)都采用了 systemd。
# systemctl status sshd● sshd.service – OpenSSH server daemonLoaded: loaded (/usr/lib/systemd/system/sshd.service; enabled; vendor preset: enabled)Active: active (running) since Sun:08:56 EDT; 6h 11min agoDocs: man:sshd(8)man:sshd_config(5)Main PID:(sshd)CGroup: /system.slice/sshd.service└─11584 /usr/in/sshd -DSep 23 02:08:56 vps.2daygeek.com systemd: Starting OpenSSH server daemon…Sep 23 02:08:56 vps.2daygeek.com sshd: Server listening on 0.0.0.0 port 22.Sep 23 02:08:56 vps.2daygeek.com sshd: Server listening on :: port 22.Sep 23 02:08:56 vps.2daygeek.com systemd: Started OpenSSH server daemon.Sep 23 02:09:15 vps.2daygeek.com sshd: Connection closed by 103.5.134.167 portSep 23 02:09:41 vps.2daygeek.com sshd: Accepted password for root from 103.5.134.167 portssh2
以上輸出的內(nèi)容顯示了最近一次啟動(dòng) sshd 服務(wù)時(shí) ssh 服務(wù)的監(jiān)聽端口。但它不會(huì)將最新日志更新到輸出中。
# systemctl status sshd● sshd.service – OpenSSH server daemonLoaded: loaded (/usr/lib/systemd/system/sshd.service; enabled; vendor preset: enabled)Active: active (running) since Thu:40:59 IST; 2 weeks 3 days agoDocs: man:sshd(8)man:sshd_config(5)Main PID: 1208 (sshd)CGroup: /system.slice/sshd.service├─ 1208 /usr/in/sshd -D├─23951 sshd: └─23952 sshd: Sep 23 12:50:36 vps.2daygeek.com sshd: Invalid user pi from 95.210.113.142 port 51666Sep 23 12:50:36 vps.2daygeek.com sshd: input_userauth_request: invalid user pi Sep 23 12:50:37 vps.2daygeek.com sshd: pam_unix(sshd:auth): check pass; user unknownSep 23 12:50:37 vps.2daygeek.com sshd: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=95.210.113.142Sep 23 12:50:37 vps.2daygeek.com sshd: pam_unix(sshd:auth): check pass; user unknownSep 23 12:50:37 vps.2daygeek.com sshd: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=95.210.113.142Sep 23 12:50:39 vps.2daygeek.com sshd: Failed password for invalid user pi from 95.210.113.142 portssh2Sep 23 12:50:39 vps.2daygeek.com sshd: Failed password for invalid user pi from 95.210.113.142 portssh2Sep 23 12:50:40 vps.2daygeek.com sshd: Connection closed by 95.210.113.142 portSep 23 12:50:40 vps.2daygeek.com sshd: Connection closed by 95.210.113.142 port
大部分情況下,以上的輸出不會(huì)顯示進(jìn)程的實(shí)際端口號(hào)。這時(shí)更建議使用以下這個(gè) journalctl 命令檢查日志文件中的詳細(xì)信息。
# journalctl | grep -i “openssh\|sshd”Sep 23 02:08:56 vps138235.vps.ovh.ca sshd: Received signal 15; terminating.Sep 23 02:08:56 vps138235.vps.ovh.ca systemd: Stopping OpenSSH server daemon…Sep 23 02:08:56 vps138235.vps.ovh.ca systemd: Starting OpenSSH server daemon…Sep 23 02:08:56 vps138235.vps.ovh.ca sshd: Server listening on 0.0.0.0 port 22.Sep 23 02:08:56 vps138235.vps.ovh.ca sshd: Server listening on :: port 22.Sep 23 02:08:56 vps138235.vps.ovh.ca systemd: Started OpenSSH server daemon.
via:
IIS7服務(wù)器管理工具是一款vnc軟件,它可以批量管理、定時(shí)上傳下載、同步操作、數(shù)據(jù)備份、到期提醒、自動(dòng)更新。
IIS7服務(wù)器管理工具
linux tcp6 listen的介紹就聊到這里吧,感謝你花時(shí)間閱讀本站內(nèi)容,更多關(guān)于linux tcp6 listen,Linux TCP6監(jiān)聽詳解,linux怎樣查看安裝的apache,【tcp】為什么 netstat 對(duì)某些服務(wù)只顯示了 tcp6 監(jiān)聽端口?,怎么樣在終端上查看vnc在linux服務(wù)器上的端口號(hào)的信息別忘了在本站進(jìn)行查找喔。
成都創(chuàng)新互聯(lián)建站主營(yíng):成都網(wǎng)站建設(shè)、網(wǎng)站維護(hù)、網(wǎng)站改版的網(wǎng)站建設(shè)公司,提供成都網(wǎng)站制作、成都網(wǎng)站建設(shè)、成都網(wǎng)站推廣、成都網(wǎng)站優(yōu)化seo、響應(yīng)式移動(dòng)網(wǎng)站開發(fā)制作等網(wǎng)站服務(wù)。
分享文章:LinuxTCP6監(jiān)聽詳解(linuxtcp6listen)
地址分享:http://www.dlmjj.cn/article/dpiepoj.html


咨詢
建站咨詢
