linux中端口的欺骗,Linux中的端口占用问题

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

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

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

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:关闭使用该端口的进程

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

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

5f300b174bf8d59bd0e53f34f21353ff.png

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

b9c230aeb97d94de5ea5e91ff6ef28b0.png

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

f9fa4f2f2238b7583562c1885ec467cd.png

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

d76901f22929fbf360ecb79d5c22864f.png

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

解决方法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,如下图所示:

9149391e908e0b70d58f52c08f9096ca.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/422045.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

手机内存卡转化linux,Android 往手机内存卡上存储用户名与密码的操作

当大家 用Android 应用 操作时,会发现有很多应用要登陆名和密码,而且,它们都能记住密码,当你退出 ,再次登陆时,你们帐号密码会自动添加上去。例:布局文件 相信都能做出来 就不一一介绍 了。下面…

Linux格式化sd卡博客,linux设备驱动那点事儿之SD卡驱动理论篇

一.SD/MMC卡介绍1.1.什么是MMC卡MMC:MMC就是MultiMediaCard的缩写,即多媒体卡。它是一种非易失性存储器件,体积小巧(24mm*32mm*1.4mm),容量大,耗电量低,传输速度快,广泛应用于消费类电子产品中。1.2.什么是SD卡SD&…

SQL Server 2008 数据库同步的两种方式 (发布、订阅)

通过SQL JOB的方式对数据库的同步,这一节作为上一节的延续介绍通过发布订阅的方式实现数据库之间的同步操作。发布订阅份为两个步骤:1、发布。2、订阅。首先在数据源数据库服务器上对需要同步的数据进行发布,然后在目标数据库服务器上对上述发…

前端学习(619):变量的小案例二

<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title><script>//请输入姓名…

【eoe特刊】第二十七期 OpenGL ES学习及项目解析

经过一个月征稿、编辑&#xff0c;新的一版特刊终于出炉了。 本次特刊的制作&#xff0c;改变以往的制作方式&#xff0c;完全取自网友的独自的风格。 在只有一个主题的前提下&#xff0c;完全是通过社区的热心的网友&#xff0c;根据自己的想法&#xff0c;自行设计&#x…

linux ubuntu技术支持电话,Ubuntu 17.04 将在1月13日结束技术支持

Canonical今天宣布&#xff0c;将在下周1月13日终止对Ubuntu 17.04 “Zesty Zapus”操作系统提供的支持。去年4月13日推出的Ubuntu 17.04是一款功能强大的内部和外部版本&#xff0c;运行最新的(当时)稳定的Linux 4.10内核系列&#xff0c;并以最新的基于Mesa 17.0和X.Org Serv…

前端学习(623):交换两个变量的值

<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>交换两个变量的值</title> </head> <…

linux 漏洞数量,Debian Linux被列为过去20年漏洞数量最多的操作系统

1999 至 2019 年间&#xff0c;研究人员共发现了 Debian Linux 中的 3067 个安全漏洞。至于 Windows 平台&#xff0c;Server 2008 以 1421 个安全漏洞位列第一。Android 和 Linux 内核分别以 2563 和 2357 个漏洞排名第二和第三&#xff0c;macOS 以 2212 个漏洞排名第四。然而…

Win10 安装 MongoDB 3.6.5 失败的问题及解决方法

MongoDB 3.6.5 2008R2Plus SSL (64 bit) Setup Wizard ended prematurely 在安装 MongoDB 的时候&#xff0c;出现了MongoDB 3.6.5 2008R2Plus SSL (64 bit) Setup Wizard ended prematurely的错误&#xff0c;原因不明&#xff0c;但有解决办法&#xff1a; 解决办法 在安装…

Qt+ArcGIS Engine 10.1 开发(一)

Qt作为一个跨平台C图形用户界面应用程序开发框架&#xff0c;相当于微软的MFC(只能运行在Windows平台上)&#xff0c;Qt命运多舛&#xff0c;几经易主&#xff0c;现在属于芬兰IT服务公司Digia。 Qt环境安装 Qt的最新版本是Qt5.0,该版本是在12月中旬发布的&#xff0c;在这里我…

分享30个新鲜PSD网站模板免费下载

Web 设计始终是设计师充满挑战性的工作。他们需要的专业技能和与的伟大想法&#xff0c;来完成一个设计良好的网站。某个时候设计师需要帮助几个免费的资源&#xff0c;以使工作更轻松。这篇文章是一个完美的解决方案&#xff0c;为网站设计的资源。在这里我们目前 30 新鲜 PSD…