zoukankan      html  css  js  c++  java
  • 端口服务

    端口服务
    端口、服务、进程是计算机操作系统中不可缺少的部分,一个进程对应着一个程序,服务和端口常常被联系在一起,一个端口对应着一个服务,例如Web服务默认对应80端口。

    端口
    在网络技术中,端口有多种含义。集线器、交换机、路由器的端口指的是连接其他网络设备的接口,如RJ-45端口、Serial端口等。我们所关注的端口不是指物理意义上的端口,而是特指TCP/IP协议中的端口,是逻辑意义上的端口。一个IP地址的端口可以有65536(2^16)个之多。端口是通过端口号来标记的,端口号只有整数,范围是从0到65536。在Internet上,各主机之间通过TCP/IP协议发送和接收数据包,各个数据包根据其目的主机的IP地址来进行路由选择。本地操作系统会给有需求的进程分配协议端口,每个端口由一个正整数标识,如:80,139,445等。当目的主机接收到数据包后,将根据报文首部的目的端口号,把数据发送到相应端口,与此端口相对应的进程会领取数据并等待下一组数据的到来。端口其实就是队,操作系统为各个进程分配了不同的队,数据包按照目的端口被推入相应的队中,等待被进程取用,在极特殊的情况下,队也有可能溢出,操作系统允许各进程指定和调整自己的队的大小。另外,接收和发送数据包的进程均需要开启端口,以便接收方顺利回传数据。

    端口可以分为3大类:
     公认端口(WellKnownPorts):端口号0到1023,它们紧密绑定于一些服务。通常这些端口的通讯明确表明了某种服务的协议。例如:80端口总为HTTP通信;

     注册端口(RegisteredPorts):端口号1024到49151.它们松散地绑定于一些服务,也就是说有许多服务绑定于这些端口,这些端口同样用于许多其它的目的。例如:许多系统处理动态端口从1024左右开始;

     动态/私有端口(Dynamic/PrivatePorts):端口号49152到65535。理论上,不应为服务分配这些端口。实际上,机器通常从1024起分配动态端口。

    服务
    服务是指执行指定系统功能的程序、例程或进程,以便支持其他程序,尤其是低层(接近硬件)程序。服务是一种应用程序类型,它在后台运行。服务应用程序通常可以在本地和通过网络为用户提供一些功能,例如客户端/服务器应用程序、Web服务器、数据库服务器以及其他基于服务器的应用程序。典型的网络服务有:DHCP、DNS、FTP、Telnet、WINS、SMTP等。DHCP的全名是“Dynamic Host Configuration Protocol”即动态主机配置协议。在使用DHCP的网络中,用户的计算机可以从DHCP服务器获得上网的参数,几乎不需要任何手工配置就可以上网。一般情况下,DHCP服务器会尽量保持每台计算机使用同一个IP地址上网。若计算机长时间没有上网或配置为使用静态地址上网,DHCP服务器就会把这个地址分配给其他计算机。DNS的全称为:“Domain Name System”即域名系统。域名系统为Internet上的主机分配域名地址和IP地址。用户使用域名地址,该系统就会自动把域名地址转为IP地址。域名服务器是运行域名系统的Internet工具。执行域名服务的服务器称之为DNS服务器,通过DNS服务器来应答域名服务的查询。

    服务可以分为2类:
    面向连接服务(Connection-Oriented)。面向连接服务要经过三个阶段:数据传输前,先建立连接,连接建立后再传输数据,数据传送完后,释放连接。面向连接服务可确保数据传送的次序和传输的可靠性。

    无连接服务(Connectionless)。无连接服务的特点是:无连接服务只有传输数据阶段,消除了除数据通信外的其它开销。只要发送实体是活跃的,无须接收实体也是活跃的。它的优点是灵活方便、迅速,特别适合于传送少量零星的报文。但无连接服务不能防止报文的丢失、重复或失序。

    端口-服务的关系
    由于每种网络的服务功能都不相同,因此有必要将不同的封包送给不同的服务来处理。服务和端口是一个一一对应的关系,相互依赖,没有服务的运行也就无所谓端口,端口的开启和关闭也就是软件服务的开启和关闭。因为IP地址与网络服务是一对多的关系,主机实际上是通过“IP地址+端口号”来区分不同服务的。例如:

    HTTP协议代理服务器常用端口:80/8080/3128/8081/9080

    SOCKS(防火墙安全会话转换协议)协议代理服务器常用端口:1080

    FTP协议代理服务器常用端口:21

    Telnet协议代理服务器常用端口:23

    DNS协议代理服务器常用端口:53

    HTTPS协议代理服务器常用端口:443

    TFTP协议代理服务器常用端口:69

    SSH(安全外壳协议)协议代理服务器常用端口:22

    SMTP协议代理服务器常用端口:25

    POP3协议代理服务器常用端口:110

    Oracle数据库默认端口号:1521

    QQ默认端口号:1080

    端口服务探测技术原理
    端口扫描原理
    通过向目标主机的TCP/UDP端口发送探测数据包,然后根据对方的回应判断端口是否开发,服务是否运行,此方法称之为端口扫描。下面对端口扫描的原理进行说明:

    一个 TCP 数据包包括一个 TCP 头,TCP头中包含6个标志位。

     SYN:标志位,用来建立连接,让连接双方序列号同步。

     FIN:表示发送端已经没有数据要求传输了,希望释放连接。

     RST:用来复位一个连接,标志置位的数据包,称为复位包。

     URG:紧急数据标志。如果为1,表示本数据包中包含紧急数据,此时紧急数据指针有效。

     ACK:确认标志位。如果为1,表示包中的确认号是有效的;否则,包中的确认号无效。

     PSH:如果置位则接收端应尽快把数据传送给应用层。

    当系统间建立连接和释放连接时,就会用到所谓的握手机制。它的工作原理大致如下:

    握手的第一步,一台计算机首先请求和另外一台计算机建立连接,它通过发送一个SYN 请求来完成,也即前面提到的SYN 标记位置位。两台计算机间的每条信息都有一个由发送方产生的序列号,序列号的使用使得双方知道他们之间是同步的,而且还可以起到丢失信息时或接收顺序错误时发送警告信息的作用。

    握手的第二步,接收到SYN 请求的计算机响应发送来的序列号,它会将ACK 标记位置位,同时它也提供自己的序列号。到现在为止,发起连接建立请求的计算机认为连接已经建立起来,然而对方却并不这样认为,对方还要等到它自己的序列号有了应答后才能确认连接建立起来。因此现在的状态称为“半连接”。如果发起连接请求的计算机不对收到的序列号作出应答,那么这个连接就永远也建立不起来,而正因为没有建立连接,所以系统也不会对这次连接做任何记录。

    握手的第三步,发起连接请求的计算机对收到的序列号作出应答,这样,两台计算机之间的连接才算建立起来。两台计算机释放连接时的情况与此类似:当一台计算机说没有更多的数据需要发送了,它发送一个FIN 信号( 将FIN标记位置位) 通知另一端,接收到FIN 的另一端计算机可能发送完了数据,也可能没发送完,但它会对此作出应答,而当它真正完成所有需要发送的数据后,它会再发送一个自己的FIN 信号,等对方对此作出应答后,连接才彻底解除。

    大部分TCP/IP 实现遵循以下原则:
    (1)当SYN或者FIN数据包到达关闭的端口, TCP 丢弃数据包,同时发送一个RST 数据包。

    (2)当RST数据包到达监听端口, RST被丢弃。

    (3)当RST 数据包到达关闭的端口,RST被丢弃。

    (4)当包含ACK 的数据包到达监听端口,数据包被丢弃,同时发送一个RST数据包。

    (5)当 SYN位关闭的数据包到达监听端口,数据包被丢弃。

    (6)当SYN数据包到达监听端口,正常的3 阶段握手继续,回答 SYN/ACK数据包。

    (7)当FIN 数据包到达监听端口,数据包被丢弃。“FIN行为”(关闭的端口返回RST,监听端口丢弃包),在URG和PSH标志位置位时同样会发生。所有的URG、PSH和FIN,或没有任何标记的TCP数据包都会引起“FIN行为”。

    端口扫描技术的分类
    端口扫描的第一步是向目标主机的TCP/UDP端口发送探测数据包,然后根据对方的回应判断端口是否开放。由于网络环境的差异以及操作系统对连接请求的应答并不一致,在端口扫描中支持多种扫描方式,以保证扫描的准确和快速。

    1) TCP connect() 扫描:也称全连接扫描。扫描主机通过TCP/IP 协议的三次握手与目标主机的指定端口建立一次完整的连接。连接由系统调用connect() 开始。如果端口开放,则连接将建立成功;否则,若返回-1则表示端口关闭。建立连接成功:响应扫描主机的SYN/ACK 连接请求,这一响应表明目标端口处于监听( 打开)的状态。如果目标端口处于关闭状态,则目标主机会向扫描主机发送RST 的响应。

    2) TCP SYN 扫描:也称“半开放”扫描,这是因为扫描程序不必要打开一个完全的TCP 连接。扫描程序发送的是一个SYN 数据包,好象准备打开一个实际的连接并等待反应一样( 参考TCP 的三次握手建立一个TCP 连接的过程) 。一个SYN|ACK 的返回信息表示端口处于侦听状态。一个RST 返回,表示端口没有处于侦听态。如果收到一个SYN|ACK ,则扫描程序必须再发送一个RST 信号,来关闭这个连接过程。这种扫描技术的优点在于一般不会在目标计算机上留下记录。但这种方法的一个缺点是,必须要有root 权限才能建立自己的SYN 数据包。

    3) TCP FIN 扫描:有的时候有可能SYN 扫描都不够秘密。一些防火墙和包过滤器会对一些指定的端口进行监视,有的程序能检测到这些扫描。相反, FIN 数据包可能会没有任何麻烦的通过。这种扫描方法的思想是关闭的端口会用适当的RST 来回复FIN 数据包。另一方面,打开的端口会忽略对FIN数据包的回复。这种方法和系统的实现有一定的关系。有的系统不管端口是否打开,都回复RST ,这样,这种扫描方法就不适用了。并且这种方法在区分Unix 和NT 时,是十分有用的。

    4) TCP 反向ident扫描:ident协议允许看到通过TCP 连接的任何进程的拥有者的用户名,即使这个连接不是由这个进程开始的。例如,连接到http 端口,然后用identd来发现服务器是否正在以root 权限运行。这种方法只能在和目标端口建立了一个完整的TCP 连接后才能看到。

    5) UDP ICMP端口不可到达扫描:这是使用UDP协议,向一个端口发送UDP包。一个打开的UDP端口不会发送任何回应,如果端口是关闭的,有些系统会返回ICMP_PORT_UNREACH信息。由于UDP不是可靠的,所以这种扫描也不是很可靠,且速度会比较慢。

  • 相关阅读:
    对于对象的要求:高内聚、低耦合,这样容易拼装成为一个系统
    为什么要使用面向对象
    什么是对象:EVERYTHING IS OBJECT(万物皆对象)
    文件 I/O 问题
    如果可能的话,使用 PC-Lint、LogiScope 等工具进行代码审查
    把编译器的选择项设置为最严格状态
    尽量不要使用与具体硬件或软件环境关系密切的变量
    尽量使用标准库函数
    如果原有的代码质量比较好,尽量复用它
    不要设计面面俱到、非常灵活的数据结构
  • 原文地址:https://www.cnblogs.com/yzmy/p/14197599.html
Copyright © 2011-2022 走看看