精华内容
下载资源
问答
  • python网络编程端口

    2018-10-16 18:38:22
    python网络编程端口 该文档仅用作学习笔记,转载请表明出处 什么是端口 那么TCP/IP协议中的端口指的是什么呢? 端口就像一个房子的门,是出入这间房子的毕竟之路。 如果一个进程需要收发网络数据,那么久需要有...

    python网络编程之端口

    该文档仅用作学习笔记,转载请表明出处

    什么是端口

    在这里插入图片描述

    • 那么TCP/IP协议中的端口指的是什么呢?
    • 端口就像一个房子的门,是出入这间房子的毕竟之路。
      在这里插入图片描述
    • 如果一个进程需要收发网络数据,那么久需要有这样的端口。
    • 在linux系统中,端口有2的16次方(65536)个
    • 操作系统为了对端口统一管理,所以进行了编号,这就是端口号

    端口号

    • 端口是通过端口号来标记的,端口号只有整数,范围是0 - 65535

    端口号分配问题

    端口号不是随便使用的,而是按照一定的规定进行分配。端口的分类标准有好几种,在这里不做详细介绍。只介绍下知名端口和动态端口。

    • 知名端口
      知名端口是众所周知的端口号,范围是0到1023.
      • 80端口分配给HTTP服务
      • 21端口分配给FTP服务
        一般情况下,如果一个程序需要使用知名端口的需要有root权限。
    • 动态端口
      动态端口的范围是从1024到65535
      之所以称为动态端口,是因为它一般不固定分配某种服务,而是动态分配。
      动态分配是指当一个系统进程或应用程序进程需要网络通信时候,它向主机申请一个端口,主机从可用的端口号中分配一个供它使用。
      当这个进程关闭时,同时也就释放了所占用的端口号。
    展开全文
  • 端口和端口号的介绍 文章目录端口和端口号的介绍1. 问题思考2. 什么是端口3. 什么端口号4. 端口和端口号的关系5. 端口号的分类5. 小结 1. 问题思考 不同电脑上的飞秋之间进行数据通信,它是如何保证把数据给飞秋而...

    端口和端口号的介绍

    1. 问题思考

    不同电脑上的飞秋之间进行数据通信,它是如何保证把数据给飞秋而不是给其它软件呢?

    其实,每运行一个网络程序都会有一个端口,想要给对应的程序发送数据,找到对应的端口即可。

    端口效果图:

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Wy2mGN5U-1596407044483)(imgs/端口-1.png)]

    2. 什么是端口

    端口是传输数据的通道,好比教室的门,是数据传输必经之路

    那么如何准确的找到对应的端口呢?

    其实,每一个端口都会有一个对应的端口号,好比每个教室的门都有一个门牌号,想要找到端口通过端口号即可。

    端口号效果图:

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-V8bc35Lu-1596407044489)(imgs/端口号.png)]

    3. 什么端口号

    操作系统为了统一管理这么多端口,就对端口进行了编号,这就是端口号,端口号其实就是一个数字,好比我们现实生活中的门牌号,

    端口号有65536个。

    那么最终飞秋之间进行数据通信的流程是这样的,通过ip地址找到对应的设备,通过端口号找到对应的端口,然后通过端口把数据传输给应用程序

    最终通信流程效果图:

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wL5aTBGu-1596407044491)(imgs/通信流程.png)]

    4. 端口和端口号的关系

    端口号可以标识唯一的一个端口。

    5. 端口号的分类

    • 知名端口号
    • 动态端口号

    知名端口号:

    知名端口号是指众所周知的端口号,范围从0到1023。

    • 这些端口号一般固定分配给一些服务,比如21端口分配给FTP(文件传输协议)服务,25端口分配给SMTP(简单邮件传输协议)服务,80端口分配给HTTP服务。

    动态端口号:

    一般程序员开发应用程序使用端口号称为动态端口号, 范围是从1024到65535。

    • 如果程序员开发的程序没有设置端口号,操作系统会在动态端口号这个范围内随机生成一个给开发的应用程序使用。
    • 当运行一个程序默认会有一个端口号,当这个程序退出时,所占用的这个端口号就会被释放。

    5. 小结

    • 端口的作用就是给运行的应用程序提供传输数据的通道

    • 端口号的作用是用来区分和管理不同端口的,通过端口号能找到唯一个的一个端口

    • 端口号可以分为两类:

      知名端口号

      动态端口号

      • 知名端口号的范围是0到1023
      • 动态端口号的范围是1024到65535
    展开全文
  • java网络编程端口

    2017-07-03 09:25:00
    端口可分为虚拟端口和物理端口,其中虚拟端口指计算机内部或交换机路由器内的端口,不可见。例如计算机中的80端口、21端口、23端口等。物理端口又称为接口,是可见端口,计算机背板的RJ45网口,交换机路由器集线器等...

    1端口(port)

    "端口"是英文port的意译,可以认为是设备与外界通讯交流的出口。端口可分为虚拟端口和物理端口,其中虚拟端口指计算机内部或交换机路由器内的端口,不可见。例如计算机中的80端口、21端口、23端口等。物理端口又称为接口,是可见端口,计算机背板的RJ45网口,交换机路由器集线器等RJ45端口。电话使用RJ11插口也属于物理端口的范畴。
    协议端口:

    如果把IP地址比作一间房子 ,端口就是出入这间房子的门。真正的房子只有几个门,但是一个IP地址的端口可以有65536(即2^16)个之多!端口是通过端口号来标记的,端口号只有整数,范围是从0 到65535(2^16-1)。


    结论:
        1):在同一台电脑中端口不能重复,若重复,则报错端口冲突
        2):如果我们需要自定义端口号,建议使用10000以上的.



    展开全文
  • Linux网络编程端口复用,相关教程链接如下: http://blog.csdn.net/tennysonsky/article/details/44062173
  • JAVA网络编程: 编写的端口扫描器, 可以扫描本机指定IP的端口
  • 网络编程端口检测

    2014-07-11 15:44:23
    检测在线网络设备的接口以及该设备的基本信息
  • 在程序代码中获取用户的输入的IP和端口
  • 网络编程_端口大全_中文+英文
  • C# 网络编程 端口扫描

    2008-11-10 15:58:36
    c# 源码,网络编程,端口扫描,可以扫描计算机打开的端口和没打开的端口
  • Windows网络编程端口扫描实验

    千次阅读 2017-04-08 22:38:42
    1.了解端口扫描的基本概念工作原理; 3 背景知识 1. 端口扫描原理 在“计算机网络”课程中,我们知道完成一次TCP 连接需要完成三次握手才能建立。端 口扫描正是利用了这个原理,通过假冒正常的连接过程,依次...

    实验三 端口扫描实验

    1 实验类型
    验证型实验
    2 实验目的
    1.了解端口扫描的基本概念和工作原理;
    3 背景知识
    1. 端口扫描原理
    在“计算机网络”课程中,我们知道完成一次TCP 连接需要完成三次握手才能建立。端
    口扫描正是利用了这个原理,通过假冒正常的连接过程,依次向目标主机的各个端口发送连
    接请求,并根据目标主机的应答情况判断目标主机端口的开放情况,从而分析并对一些重要
    端口实施攻击。
    端口扫描的方式有两种,一种称为完整扫描,一次连接过程如下图所示:
    完整扫描连接过程示意图
    另一种扫描方式称为半开扫描,出于欺骗的目的,半开扫描在收到服务端的应答信号(SYN+ACK)后,不再发送响应信号(ACK)。一次连接过程如下图所示:
    这里写图片描述
    半开扫描连接过程示意图
    这里写图片描述
    4 实验内容
    1、编写一个利用全连接的端口扫描程序,能显示目标主机的端口开放情况。要求能在命令
    行输入要扫描的目标主机和端口范围。比如:scan ... nnnn-mmmm。
    代码如下:

    #include<stdio.h>
    #include<WINSOCK2.H>
    #include<string.h>
    #include<iphlpapi.h>
    #pragma comment(lib,"WS2_32.lib")
    int main(){
        WSADATA WSAData;
        sockaddr_in addr; //用来创建socket的结构体
        char IpAddress[100]; //待扫描的主机IP地址
        char startPort[10],endPort[10]; //开始和结束的端口号
        printf("请输入要扫描的主机IP地址:");
        gets(IpAddress);
        printf("请输入开始扫描的端口号:");
        gets(startPort);
        printf("请输入开始结束的端口号:");
        gets(endPort);
    
        if(WSAStartup(MAKEWORD(2,2),&WSAData)!=0){ //初始化Winsock2.2
              printf("无法完成初始化...");
              return 0;
        }
        addr.sin_family=AF_INET;
        addr.sin_addr.S_un.S_addr=inet_addr(IpAddress); //将点分十进制的IP地址转换为网络字节序
        for(int i=atoi(startPort);i<=atoi(endPort);i++){ //atoi函数将字符串型端口转换为int型的值
            SOCKET s=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);//和每一个端口建立相关的socket,用于TCP连接
            if(s==INVALID_SOCKET){  //若端口建立失败,则程序结束
                printf("建立Socket失败,错误代码:%d",WSAGetLastError());  
                return 0;
            }
            addr.sin_port=(htons(i));//将端口设置为遍历的每一个端口,用于TCP连接
            if((connect(s,(sockaddr*)&addr,sizeof(sockaddr)))==-1){
                   printf("端口关闭,端口号为:%d\n",i);
            }else{
                          printf("端口开启,端口号为:%d\n",i);
            }
            closesocket(s); //得到端口是否开启后关闭socket
        }
        if(WSACleanup()==SOCKET_ERROR){
               printf("WSACleanUp出错!!!");
        }  //做一些清除工作
        system("pause");
        return 0;
    }

    实验结果:
    这里写图片描述

    以上代码效率非常低,提高效率可以通过多开几个线程来同时扫描。多线程下的扫描这里就不写了,下面把相关的函数放在下面,可以字节动手写下:

    在windows下,我们可以调用SDK win32 api来编写多线程的程序,下面就此简单的讲一下:
    创建线程的函数
    代码如下:
    HANDLE CreateThread(
    LPSECURITY_ATTRIBUTES lpThreadAttributes, // SD
    SIZE_T dwStackSize, // initial stack size
    LPTHREAD_START_ROUTINE lpStartAddress, // thread function
    LPVOID lpParameter, // thread argument
    DWORD dwCreationFlags, // creation option
    LPDWORD lpThreadId // thread identifier
    );
    在这里我们只用到了第三个和第四个参数,第三个参数传递了一个函数的地址,也是我们要指定的新的线程,第四个参数是传给新线程的参数指针。eg1:

    复制代码 代码如下:

    #include <iostream>
    #include <windows.h>
    using namespace std;
    DWORD WINAPI Fun(LPVOID lpParamter)
    {
          while(1) { cout<<"Fun display!"<<endl; }
    }
    int main()
    {
        HANDLE hThread = CreateThread(NULL, 0, Fun, NULL, 0, NULL);
        CloseHandle(hThread);
        while(1) { cout<<"main display!"<<endl;  }
        return 0;
    }

    我们可以看到主线程(main函数)和我们自己的线程(Fun函数)是随机地交替执行的,但是两个线程输出太快,使我们很难看清楚,我们可以使用函数
    VOID Sleep(
    DWORD dwMilliseconds // sleep time
    );
    来暂停线程的执行,dwMilliseconds表示千分之一秒,所以Sleep(1000);表示暂停1秒
    eg2:
    复制代码 代码如下:

    #include <iostream>
    #include <windows.h>
    using namespace std;
    DWORD WINAPI Fun(LPVOID lpParamter)
    {   
          while(1) { cout<<"Fun display!"<<endl; Sleep(1000);}
    }
    int main()
    {
          HANDLE hThread = CreateThread(NULL, 0, Fun, NULL, 0, NULL);
          CloseHandle(hThread);
          while(1) { cout<<"main display!"<<endl;  Sleep(2000);}
          return 0;
    }

    执行上述代码,这次我们可以清楚地看到在屏幕上交错地输出Fun display!和main display!,我们发现这两个函数确实是并发运行的,细心的读者可能会发现我们的程序是每当Fun函数和main函数输出内容后就会输出换行,但是我们看到的确是有的时候程序输出换行了,有的时候确没有输出换行,甚至有的时候是输出两个换行。这是怎么回事?下面我们把程序改一下看看:
    eg3:
    代码如下:

    #include <iostream>
    #include <windows.h>
    using namespace std;
    DWORD WINAPI Fun(LPVOID lpParamter)
    {
          while(1) { cout<<"Fun display!\n"; Sleep(1000);}
    }
    int main()
    {
          HANDLE hThread = CreateThread(NULL, 0, Fun, NULL, 0, NULL);
          CloseHandle(hThread);
          while(1) { cout<<"main display!\n";  Sleep(2000);}
          return 0;
    }

    我们再次运行这个程序,我们发现这时候正如我们预期的,正确地输出了我们想要输出的内容并且格式也是正确的。下面我就来讲一下此前我们的程序为什么没有正确的运行。多线程的程序时并发地运行的,多个线程之间如果公用了一些资源的话,我们并不能保证这些资源都能正确地被利用,因为这个时候资源并不是独占的,举个例子吧:

    eg4:
    加入有一个资源 int a = 3
    有一个线程函数 selfAdd() 该函数是使 a += a;
    又有一个线程函数 selfSub() 该函数是使a -= a;
    我们假设上面两个线程正在并发欲行,如果selfAdd在执行的时候,我们的目的是想让a编程6,但此时selfSub得到了运行的机会,所以a变成了0,等到selfAdd的到执行的机会后,a += a ,但是此时a确是0,并没有如我们所预期的那样的到6,我们回到前面EG2,在这里,我们可以把屏幕看成是一个资源,这个资源被两个线程所共用,加入当Fun函数输出了Fun display!后,将要输出endl(也就是清空缓冲区并换行,在这里我们可以不用理解什么事缓冲区),但此时main函数确得到了运行的机会,此时Fun函数还没有来得及输出换行就把CPU让给了main函数,而这时main函数就直接在Fun display!后输出main display!,至于为什么有的时候程序会连续输出两个换行,读者可以采用同样的分析方法来分析,在这里我就不多讲了,留给读者自己思考了。
    那么为什么我们把eg2改成eg3就可以正确的运行呢?原因在于,多个线程虽然是并发运行的,但是有一些操作是必须一气呵成的,不允许打断的,所以我们看到eg2和eg3的运行结果是不一样的。
    那么,是不是eg2的代码我们就不可以让它正确的运行呢?答案当然是否,下面我就来讲一下怎样才能让eg2的代码可以正确运行。这涉及到多线程的同步问题。对于一个资源被多个线程共用会导致程序的混乱,我们的解决方法是只允许一个线程拥有对共享资源的独占,这样就能够解决上面的问题了。
    代码如下:
    HANDLE CreateMutex(
    LPSECURITY_ATTRIBUTES lpMutexAttributes, // SD
    BOOL bInitialOwner, // initial owner
    LPCTSTR lpName // object name
    );

    该函数用于创造一个独占资源,第一个参数我们没有使用,可以设为NULL,第二个参数指定该资源初始是否归属创建它的进程,第三个参数指定资源的名称。
    代码如下:

    HANDLE hMutex = CreateMutex(NULL,TRUE,”screen”);这条语句创造了一个名为screen并且归属于创建它的进程的资源
    代码如下:
    BOOL ReleaseMutex(
    HANDLE hMutex // handle to mutex
    );
    该函数用于释放一个独占资源,进程一旦释放该资源,该资源就不再属于它了,如果还要用到,需要重新申请得到该资源。申请资源的函数如下
    代码如下:
    DWORD WaitForSingleObject(
    HANDLE hHandle, // handle to object
    DWORD dwMilliseconds // time-out interval
    );

    第一个参数指定所申请的资源的句柄,第二个参数一般指定为INFINITE,表示如果没有申请到资源就一直等待该资源,如果指定为0,表示一旦得不到资源就返回,也可以具体地指定等待多久才返回,单位是千分之一秒。好了,该到我们来解决eg2的问题的时候了,我们可以把eg2做一些修改,如下
    eg5:
    代码如下:

    #include <iostream>
    #include <windows.h>
    using namespace std;
    HANDLE hMutex;
    DWORD WINAPI Fun(LPVOID lpParamter)
    {
           while(1) {
                     WaitForSingleObject(hMutex, INFINITE);
                     cout<<"Fun display!"<<endl;
                     Sleep(1000);
                     ReleaseMutex(hMutex);
            }
      }
    int main()
    {
          HANDLE hThread = CreateThread(NULL, 0, Fun, NULL, 0, NULL);
          hMutex = CreateMutex(NULL, FALSE, "screen");
          CloseHandle(hThread);
          while(1) {
                   WaitForSingleObject(hMutex, INFINITE);
                   cout<<"main display!"<<endl; 
                   Sleep(2000);
                   ReleaseMutex(hMutex);
          }
          return 0;
    }
    展开全文
  • 在《绑定( bind )端口需要注意的问题》提到:一个网络应用程序只能绑定一个端口( 一个套接字只能绑定一个端口 )。 实际上,默认的情况下,如果一个网络应用程序的一个套接字 绑定了一个端口( 占用了 8000 ),这时候...
  • 网络编程端口的认识与了解

    千次阅读 2017-06-21 12:29:49
    端口 ...端口又可分为三大类:公认端口、注册端口以及动态/或私有端口 公认端口:从0到1023,它们紧密绑定于一些服务。通常这些端口的通讯明确表明了某种服务的协议。例如:80端口实际上总是
  • socket端口扫描,MFC网络编程实现

    热门讨论 2011-05-09 12:27:04
    MFC SOCKET 端口 网络编程 socket端口扫描,MFC网络编程实现
  • 网络编程常用端口

    千次阅读 2012-12-24 20:53:07
    计算机常用端口一览表: 1 传输控制协议端口服务多路开关选择器  2 compressnet 管理实用程序  3 压缩进程  5 远程作业登录  7 回显(Echo)  9 丢弃  11 在线用户  13 时间  15 netstat...
  • 一是物理意义上的端口,比如,ADSL Modem、集线器、交换机、路由器用于连接其他网络设备的接口,如RJ-45端口、SC端口等等。 二是逻辑意义上的端口,一般是指TCP/IP协议中的端口端口号的范围从0到65535,比如用于...
  • 常见的网络协议和端口

    千次阅读 2019-07-30 16:08:20
    常见的网络协议\端口号 一、端口的分类 <一>根据端口性质来分 1、公认端口(常用端口):0-1024 它们紧密绑定于一些特定的服务。通常这些端口的通信明确表明了某种服务的协议。这些端口是不可以重新定义它...
  • 主要介绍了Java网络编程实现的简单端口扫描器,涉及Java网络编程Socket组建、swing组建及多线程相关操作技巧,需要的朋友可以参考下
  • 网络 socket 编程 端口 大全

    千次阅读 2017-05-30 01:11:44
    **2端口:管理实用程序 3端口:压缩进程 5端口:远程作业登录 7端口:回显 9端口:丢弃 11端口:在线用户 13端口:时间 17端口:每日引用 18端口:消息发送协议 19端口:字符发生器 20端口:FTP文件传输...
  • 网络编程(三):网络中的端口

    千次阅读 2016-08-06 21:54:06
     在网络技术中,端口(Port)包括逻辑端口和物理端口两种类型。物理端口指的是物理存在的端口,如ADSL Modem、集线器、交换机、路由器上用 于连接其他网络设备的接口,如RJ-45端口、SC端口等等。逻辑端口是指逻辑...
  • 网络游戏-交换无线网络的多端口接口.zip
  • 网络通信ip和端口

    千次阅读 2018-07-13 10:29:39
     为了联通多方然后进行通信用的,即把数据从一方传递给另一方 为了让在不同的电脑上运行软件之间能够互相传递数据,就需要借助网络的功能网络编程 让在不同的电脑上的软件能够进行数据的传递,即进程之间的通信ip...
  • 高性能网络编程--IO 完成端口
  • windows socket网络编程之iocp完成端口模型的例子
  • 手把手叫你玩转网络编程系列之三  完成端口(Completion Port)详解  ----- By PiggyXP(小猪) 前 言  本系列里完成端口的代码在两年前就已经写好了,但是由于许久没有写东西了,不知该如何提笔,所以这篇...
  • 网络游戏-多端口网络接口卡的控制方法.zip
  • 源IP地址目的IP地址以及源端口目的端口号的组合称为套接字。其用于标识客户端请求的服务器服务。 它是网络通信过程中端点的抽象表示,包含进行网络通信必需的五种信息:连接使用的协议,本地主机的IP地址,...
  • 2端口:管理实用程序 3端口:压缩进程 5端口:远程作业登录 7端口:回显 9端口:丢弃 11端口:在线用户 13端口:时间 17端口:每日引用 18端口:消息发送协议 19端口:字符发生器 20端口:FTP文件传输协议(默认数据...
  • 1. 引言网络通信的本质仍然是进程间通信。以前,我们在学习进程间通信的时候(共享内存、管道、以及用于同步的信号量),并没有提到过网络 IPC,那时候是因为基础不太够。另一方面,之前讲的进程间通信,所有的进程...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 442,011
精华内容 176,804
关键字:

网络接口和端口