本文将会阐述两种解决端口占用的方法。

本文会用到的服务器端的程序如下:

1 #include "unp.h"

2 #include

3

4 int main(int argc, char **argv)5 {6 intlistenfd, connfd;7 socklen_t len;8 structsockaddr_in servaddr, cliaddr;9 charbuff[MAXLINE];10 time_t ticks;11

12 listenfd = Socket(AF_INET, SOCK_STREAM, 0);13

14 bzero(&servaddr, sizeof(servaddr));15 servaddr.sin_family =AF_INET;16 servaddr.sin_addr.s_addr =htonl(INADDR_ANY);17 servaddr.sin_port = htons(13); /*daytime server*/

18

19 int on = 1;20 Setsockopt(listenfd, SOL_SOCKET, SO_REUSEADDR, &on, sizeof(on));21

22 Bind(listenfd, (SA *) &servaddr, sizeof(servaddr));23

24 Listen(listenfd, LISTENQ);25

26 for(; ;)27 {28 len = sizeof(cliaddr);29 connfd = Accept(listenfd, (SA *)&cliaddr, &len);30

31 printf("connection from %s, port %d",32 Inet_ntop(AF_INET, &cliaddr.sin_addr, buff, sizeof(buff)),33 ntohs(cliaddr.sin_port));34

35 ticks =time(NULL);36 snprintf(buff, sizeof(buff), "%.24s", ctime(&ticks));37 Write(connfd, buff, strlen(buff));38

39 Close(connfd);40 }41

42 exit(0);43 }

daytimetcpsrv.c

该程序试图将TCP套接字绑定到13号端口(“给请求主机发送日期和时间”)。

问题描述

如果一个端口已经被占用,而我们的程序又绑定到该端口,则我们在运行程序的时候系统会提示错误:“bind error: Address already in use”,即端口已被占用。

解决方法1:关闭使用该端口的进程

这种方法应该是最笨的了,而且在实际中我们不大可能这样子做。

我们运行了上边提到的程序,得到了下边的结果:

很明显,已经有进程占用了这个端口。我们可以先看一下是哪些服务占用了端口(在这里是13):

从上图可以看出是TCP服务占用了这个端口。我们接下来看一下是什么进程开启了这个TCP服务:

现在我们知道是xinetd服务占用了这个接口。我们直接关闭掉这个服务:

现在开启我们的服务端程序就没问题了。

解决方法2:设置端口为可重用

在IBM的一篇文章Linux 套接字编程中的 5 个隐患中作者提出用函数setsockopt来设定端口可重用,代码如下:

/*Enable address reuse*/on= 1;

ret= setsockopt( sock, SOL_SOCKET, SO_REUSEADDR, &on, sizeof(on) );

但在我们的程序中,用了这种方法还是不行()。

出现这个问题的原因在于开启我们自己的程序前我们已经开启了其它占用13号端口的服务(如xinetd),而该已占用13号端口的服务却没有设定13号端口为可重用,最终导致我们的程序绑定端口错误。

正确的做法是第一个使用13号(对其它端口号也一样)端口的进程要设定13号端口为可重用,这样后续使用该端口的进程方能绑定成功。

所以我们要先运行我们的程序,将13号端口设定为可重用,然后再运行其它使用该端口的进程(如xinetd)。用这种方法,我们的程序和xinetd服务终于能够同时绑定端口号13,如下图所示:

linux中端口的欺骗,Linux中的端口占用问题相关推荐

  1. linux然后防止ip欺骗,linux – 如何在iptables中防止ip欺骗?

    我在 Linux上的Apache Web服务器被大量不存在文件的请求所困扰.直接影响是访问和访问的快速增长.错误日志.我已经通过不记录这些请求(如果它与特定字符串匹配)来处理这个问题.我们从多个IP地 ...

  2. Kali linux 2016.2(Rolling)中metasploit的端口扫描

    目前常见的端口扫描技术一般有如下几类: TCP  Connect.TCP SYN.TCP ACK.TCP FIN. Metasploit中的端口扫描器 Metasploit的辅助模块中提供了几款实用的 ...

  3. Linux中检查本地系统上的开放端口列表的方法

    在 Linux 中很少有用于此目的的实用程序.然而,我提供了四个最重要的 Linux 命令来检查这一点. 你可以使用以下四个命令来完成这个工作.这些命令是非常出名的并被 Linux 管理员广泛使用. ...

  4. linux怎么修改sftp默认端口,如何在 Linux 系统中如何更改 SFTP 端口

    SFTP(SSH文件传输协议)是一种安全文件协议,用于通过加密连接在两个主机之间传输文件. 它还允许您对远程文件执行各种文件操作并恢复文件传输. SFTP可以替代旧版FTP协议. 它具有FTP的所有功 ...

  5. linux中的ip地址、子网掩码、端口

    ip地址:用来在网络中标记一台电脑的一串数字,比如192.168.1.1:在本地局域网上是惟一的. 每一个IP地址包括两部分:网络地址和主机地址 子网掩码只有一个作用,就是将某个IP地址划分成网络地址 ...

  6. linux系统端口更换,在Linux中怎样修改httpd的端口号

    LINUX系统教程:如何修改HTTPD的端口? 停止httpd服务 这里使用8080端口后,经过验证能够登录成功,说明httpd端口已经更改并且httpd能够正常工作. 相关介绍:Linux Linu ...

  7. linux 扫描开放的端口命令,在Linux系统中检查(扫描)开放端口的方法

    无论是对网络连接问题进行故障排除还是配置防火墙,首先要检查的是在系统上实际打开的端口,本文介绍几种查找系统外部打开端口的方法,即在Linux系统中检查(扫描)开放端口. 什么是开放端口 侦听端口是应用 ...

  8. linux 封禁端口,如何在Linux服务器中使用防火墙封禁端口?

    我们知道服务器的防火墙是一种以软件为基础的网络安全系统,或者在某些情况下,是一种以硬件为基础的网络安全系统.它能自动监控系统中的流量流入和流出,并根据预先配置的规则阻止某些类型的数据流. 在Linux ...

  9. linux下开放sftp端口,在Linux系统中更改默认的SFTP端口及使用新的SFTP端口

    本文介绍如何在Linux操作系统中更改默认的SFTP端口,支持Ubuntu.CentOS等发行版,同时还将向您展示如何配置防火墙以允许在新端口上使用.先声明的一点是不要将SFTP与FTPS混淆,因为两 ...

最新文章

  1. 野火开发版屏幕_鸿蒙OS手机版正式发布!副总裁现场表态:我们已经准备好了...
  2. getAttribute与getParameter区别
  3. 【UAV】光流传感器代码分析
  4. 华为服务器提示错误信息,服务器错误日志
  5. SELINUX导致的SSH密匙无法创建和访问的问题
  6. opencv opencl加速_回放 | OpenCV Webinar 3:OpenCV深度学习应用与原理分析
  7. 在 Domoticz 中添加插座开关
  8. 计算机在线应用分为,在线计算器的分类和使用方法
  9. js 随机数_JS常用方法和一些封装:随机数生成
  10. 单片机毕业设计不用愁!!30篇单片机毕业设计参考案例
  11. dotnet html 桌面开发,用HTML,Vue+element-UI做桌面UI
  12. Mac安装jekyll踩坑
  13. Windows.old可以删除吗?
  14. echarts地图api series_百度地图2.0离线版与echarts结合
  15. Vue定制iview的表格头格式,通用版
  16. 怎么查验佳能EOS单反相机是否正品
  17. CSDN超简单的上传gif动图方法
  18. 转载:基于MATLAB的几种图像分割算法
  19. PATA1024_大整数运算(难度:⭐️⭐️)
  20. 《大型网站技术架构:核心原理与案例分析》之读后小结

热门文章

  1. 前端学习(171):注释元素
  2. 第一百三十三期:MySQL锁会不会,你就差看一看咯
  3. html:(15):用css样式给表格添加边框和caption标签
  4. flask web开发的相关博文学习
  5. JS之返回字符串最后出现的位置lastIndexOf
  6. 热插拔服务器电源维修,无需关停系统即可热插拔,TE Connectivity推出滑轨电源连接器...
  7. 零基础Python知识点回顾(一)
  8. C++ 判断系统大小字节序
  9. 洛谷P3392 涂国旗
  10. MYSQL 查看表上索引的 1 方法