近来的项目中用到server端和client端通讯交互,当我在server端绑定80端口后运行时,提示"Addressalreadyinuse"而直接退出服务了,后来查到是该80端口早已默认被HTTP服务占用了,我的程序没法复用造成出错。折腾了三天后发觉关闭HTTP服务后果断运行成功。关于端口复用的知识还在学习中,如今把Linux系统中查看和管理服务端口做一个简单的小结,就当是一次积累。
查阅了相关资料,发觉Linux下边似乎没有哪些直接开启或则关掉端口的命令,若仅仅只是开启了端口而不把它与进程相联系,则端口的开启与关掉毫无意义(开了端口却没有程序处理进来的数据)。系统服务中,端口不是独立存在的,它是屈从于进程的。某个进程开启,这么它对应的端口就开启了,进程关掉,则该端口也就关掉了。上次若某个进程再度开启,则相应的端口也再度开启。所以,不要纯粹的觉得你要去关掉掉某个端口了。并且,禁用某个端口是可行的。由于,Linux上面端口的活动与进程是紧密相连的,假如想要关掉某个端口,这么只要kill掉与它对应的进程就可以了。
1.可以通过"netstat-anp"来查看什么端口被打开。
说明:
#-a显示所有活动的TCP联接,以及正在窃听的TCP和UDP端口
#-n以数字方式表示地址和端标语,不企图去解析其名称(number)linux入门,参数'-n'会将应用程序转为端口显示,即数字格式的地址,如:nfs->2049,ftp->21
#-p列举与端口窃听或联接相关的进程(有个地方须要注意,下边会提及)(pid)
注意:
“-p”选项存在权限问题,假若在普通用户登陆的shell上面执行netstat命令,这么只能列举拥有该普通用户权限的相关进程,假如想要听到所有的端口情况,最好还是切到root用户进行操作。
之后可以通过"lsof-i:$PORT"查看应用该端口的程序($PORT指对应的端标语)。或则你也可以查看文件/etc/services,从上面可以找出端口所对应的服务(可通过"chkconfig"查看系统服务的开启状态)。
2.(注:有些端口通过netstat查不下来,更可靠的方式是"sudonmap-sT-Olocalhost")
3.若要关掉某个端口,则有以下两种方式:
1)通过iptables工具将该端口禁掉,如:
"sudo iptables -A INPUT -p tcp --dport $PORT -j DROP" "sudo iptables -A OUTPUT -p tcp --dport $PORT -j DROP"
2)关闭对应的应用程序,则端口就自然关掉了,命令如下如:
"kill -9 PID" (PID:进程号) 如:通过"netstat -anp | grep ssh" 有显示: tcp 0 127.0.0.1:2121 0.0.0.0:*LISTEN 7546/ssh 则: "kill -9 7546"退出进程ssh.
比如要关掉22号端口:
$netstat-anp|grep:22
tcp000.0.0.0:220.0.0.0:*LISTEN988/sshd
这么,晓得了22号端口对应的进程ID988,只要kill掉该进程即可关掉该端口:
$kill988
4.Netstat常用选项介绍:
netstat–tn——列出所有TCP合同的联接状态
#-t只显示与TCP合同相关的联接和端口窃听状态,注意和-a有区别(tcp)
netstat–tuln——列出所有inet地址类的端口窃听状态
netstat–s——本选项才能根据各个合同分别显示其统计数据。假如你的应用程序(如Web浏览器)运行速率比较慢,或则不能显示Web页之类的数据,这么你就可以用本选项来查看一下所显示的信息。你须要仔细查看统计数据的各行,找到出错的关键字,从而确定问题所在。
netstat–e——本选项用于显示关于以太网的统计数据。它列举的项目包括传送的数据报的总字节数、错误数、删除数、数据报的数目和广播的数目。这种统计数据既有发送的数据报数目linux如何关闭端口中文linux操作系统,也有接收的数据报数目。这个选项可以拿来统计一些基本的网路流量。
netstat–r——本选项可以显示关于路由表的信息,类似于前面所讲使用routeprint命令时听到的信息。不仅显示有效路由外linux如何关闭端口,还显示当前有效的联接。
netstat–a——本选项显示一个所有的有效联接信息列表,包括已完善的联接(ESTABLISHED),也包括窃听联接恳求(LISTENING)的这些联接,断掉联接(CLOSE_WAIT)或则处于联机等待状态的(TIME_WAIT)等
netstat–n——显示所有已完善的有效联接