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,一经查实,立即删除!

相关文章

oracle维护常用SQL语句(查看系统表和视图)

转:http://www.360doc.com/content/11/1230/15/7489308_176090474.shtml oracle维护常用SQL语句(查看系统表和视图) 1.查看表空间的名称及大小 select t.tablespace_name, round(sum(bytes/(1024*1024)),0) ts_size   from dba_tablespaces t, dba_data_files d   wher…

Asp.net 调用mysql存储过程参数传中文乱码!

<add name"xxx" connectionString"server10.10.xx.xx;User Idxxx;passwordxxxx;databasexxxx;Port3306;character setutf8;"/> 在web.config中进行编码设置&#xff1a;character setutf8; 调用存储过程方法&#xff1a;MySqlCommand cmd new MySql…

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

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

Mplayer 音频解码分析

一.序 还是按部就班的来&#xff0c;这次主要分析一下Mplayer中音频解码流程&#xff0c;特别说明一下&#xff0c;这里 的音频解码包括后面会说的视频解码统统不涉及到具体的格式和解码算法&#xff0c;如果大伙对具 体文件格式和解码感兴趣可以在网上找相关资料看看~也可以留…

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

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

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

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

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

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

python linux alias,linux命令:alias

alias命令简介&#xff1a;此个命令用于命令别名&#xff0c;在shell中定义的别名仅在当前shell生命周期中有效&#xff1b;别名的有效范围仅为当前shellj进程&#xff1b;要想别名永久有效&#xff0c;必须把别名定义在别名配置文档中(/root/.bashrc---/root表示当前用户的家目…

UITabBarController

/*UITabBarController//实例化三个controllerMyViewController1 *vc1 [[MyViewController1 alloc]init];MyViewController2 *vc2 [[MyViewController2 alloc]init];// MyViewController3 *vc3 [[MyViewController3 alloc]init];//实例化一个导航,导航管理vc2&#xff0c;vc3…

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

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

Linux如何禁止集成显卡,Ubuntu中禁用独显只用集显的方法

新装了ubuntu 12.04 Beta。还不错&#xff0c;就是双显卡问题。显卡&#xff1a;intel i3集成显卡和ati 5650。以前装了ati 驱动的话&#xff0c;若BIOS里不禁用集显就不能进入ubuntu&#xff0c;禁用了集显进win7又不能用集显&#xff0c;很是麻烦。用了那个git acpi_call禁有…

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> <…

realloc invalid pointer错误解析

realloc invalid pointer错误 char* temp(char*) realloc(src,sizeof(char)*100); 如上面这行代码&#xff0c;可能会出现标题中的错误。错误原因是因为src指向的不是NULL或堆中的地址。 具体的就是realloc函数要求src为下面两种情况 1.srcNULL 2.src指针必须是malloc(), callo…

Linux的使用和认识实验,通过一个小实验认识Linux vDSO

这里不再解释vDSO的概念&#xff0c;而直接谈其意义&#xff1a;vDSO类似一个信息公告板&#xff0c;用户可以直取所需&#xff0c;而无需为此办理任何手续。vDSO相当于内核直接暴露出来的一个C库&#xff0c;作为GLIBC的补充。…类似gettimeofday之类的调用&#xff0c;每次都…

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

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