端口扫描分析

本文介绍了端口扫描分析,包括操作系统中的网络相关命令,如Ping、Tracert、rusers、finger和host,以及不同类型的端口扫描技术,如TCP connect()扫描、TCP SYN扫描、TCP FIN扫描等。端口扫描是网络安全的重要组成部分,用于发现系统漏洞和监控网络状态。
摘要由CSDN通过智能技术生成

操作系统 端口扫描分析


来源:自绿色兵团

端口扫描分析(一)常用的网络相关命令
来源/作者:Oliver


  一个端口就是一个潜在的通信通道,也就是一个入侵通道。对目标计算机进行端口扫描,能得到许多有用的信息。进行扫描的方法很多,可以是手工进行扫描,也可以用端口扫描软件进行。
  在手工进行扫描时,需要熟悉各种命令。对命令执行后的输出进行分析。用扫描软件进行扫描时,许多扫描器软件都有分析数据的功能。
  通过端口扫描,可以得到许多有用的信息,从而发现系统的安全漏洞。
  下面首先介绍几个常用网络命令,对端口扫描原理进行介绍,然后提供一个简单的扫描程序。第一节 几个常用网络相关命令
Ping命令经常用来对TCP/IP网络进行诊断。通过目标计算机发送一个数据包,让它将这个数据包反送回来,如果返回的数据包和发送的数据包一致,那就是说你的PING命令成功了。通过这样对返回的数据进行分析,就能判断计算机是否开着,或者这个数据包从发送到返回需要多少时间。

一。几个常用网络相关命令
1.Ping命令的基本格式:
    ping hostname

  其中hostname是目标计算机的地址。Ping还有许多高级使用,下面就是一个例子。
C:> ping -f hostname
  这条命令给目标机器发送大量的数据,从而使目标计算机忙于回应。在Windows 95的计算机上,使用下面的方法:
c:/windows/ping -l 65500 saddam_hussein's.computer.mil
  这样做了之后,目标计算机有可能会挂起来,或从新启动。由于 -l 65510 产生一个巨大的数据包。由于要求返回一个同样的数据包,会使目标计算机反应不过来。
  在Linux计算机上,可以编写一个程序来实现上述方法。
#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netdb.h>
#include <netinet/in.h>
#include <netinet/in_systm.h>
#include <netinet/ip.h>
#include <netinet/ip_icmp.h>
 
/*
* If your kernel doesn't muck with raw packets, #define REALLY_RAW.
* This is probably only Linux.
*/
#ifdef REALLY_RAW
#define FIX(x) htons(x)
#else
#define FIX(x) (x)
#endif
 
int
main(int argc, char **argv)
{
    int s;
    char buf[1500];
    struct ip *ip = (struct ip *)buf;
    struct icmp *icmp = (struct icmp *)(ip + 1);
    struct hostent *hp;
    struct sockaddr_in dst;
    int offset;
    int on = 1;
 
    bzero(buf, sizeof buf);
if ((s = socket(AF_INET, SOCK_RAW, IPPROTO_IP)) < 0) {
        perror("socket");
        exit(1);
    }
    if (setsockopt(s, IPPROTO_IP, IP_HDRINCL, &on, sizeof(on)) < 0) {
        perror("IP_HDRINCL");
        exit(1);
    }
    if (argc != 2) {
        fprintf(stderr, "usage: %s hostname/n", argv[0]);
        exit(1);
    }
    if ((hp = gethostbyname(argv[1])) == NULL) {
        if ((ip->ip_dst.s_addr = inet_addr(argv[1])) == -1) {
            fprintf(stderr, "%s: unknown host/n", argv[1]);
        }
    } else {
        bcopy(hp->h_addr_list[0], &ip->ip_dst.s_addr, hp->h_length);
    }

    printf("Sending to %s/n", inet_ntoa(ip->ip_dst));
    ip->ip_v = 4;
    ip->ip_hl = sizeof *ip >> 2;
    ip->ip_tos = 0;
    ip->ip_len = FIX(sizeof buf);
    ip->ip_id = htons(4321);
    ip->ip_off = FIX(0);
    ip->ip_ttl = 255;
    ip->ip_p = 1;
    ip->ip_sum = 0;         /* kernel fills in */
    ip->ip_src.s_addr = 0;     /* kernel fills in */
 
    dst.sin_addr = ip->ip_dst;
    dst.sin_family = AF_INET;
 
    icmp->icmp_type = ICMP_ECHO;
    icmp->icmp_code = 0;
    icmp->icmp_cksum = htons(~(ICMP_ECHO << 8));
        /* the checksum of all 0's is easy to compute */

    for (offset = 0; offset < 65536; offset += (sizeof buf - sizeof *ip)) {
        ip->ip_off = FIX(offset >> 3);
        if (offset < 65120)
            ip->ip_off |= FIX(IP_MF);
        else
            ip->ip_len = FIX(418); /* make total 65538 */
        if (sendto(s, buf, sizeof buf, 0, (struct sockaddr *)&dst,
                    sizeof dst) < 0) {

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值