通行证│用户名: 密码: 验证码: 验证码,看不清楚?请点击刷新验证码 电信网通铁通移动   在线
文章搜索:
热门搜索:红客 黑鹰 红客技术 安全动画 红客培训
首页 文章 软件 动画 资源 励志 论坛 邮箱 会员 军事 科技 博客 爱心红客 最近更新 800g资源
 业内新闻 漏洞公告 病毒公告 电脑知识 网络知识 菜鸟入门 攻防教程 黑客攻防 安全编程 工具使用 综合安全 个人安全 安全相关 Q Q安全 原创精华 红客人物 站内事件
您现在的位置: 爱国者安全网 >> 文章类 >> 红客教程 >> 攻防教程 >> 文章正文
推荐:入侵技术介绍——目标探测
责任编辑:水土不服   更新日期:2007-10-12
 


void useage()
{
printf("******************************************\n");
printf("ICMPPing\n");
printf("\t Written by Refdom\n");
printf("\t Email: refdom@263.net\n");
printf("Useage: ICMPPing.exe Target_ip \n");
printf("*******************************************\n");
}

void DecodeHeader(char*, int);

void main(int argc, char* argv[])
{
ICMP_HEADER icmpHeader;
int rect;
WSADATA WSAData;
SOCKET sock;
SOCKADDR_IN addr_in,addr_from;
char recvbuf[1024];

useage();
if (argc!=2)
{ exit(0); }

if (WSAStartup(MAKEWORD(2,2), &WSAData) != 0 )
{ printf ("WSAStartup Error!\n");
exit(0);
}

sock= socket(AF_INET, SOCK_RAW, IPPROTO_ICMP);
int nTimeOut = 2000;
setsockopt(sock, SOL_SOCKET, SO_SNDTIMEO, (char*)&nTimeOut, sizeof(nTimeOut));
setsockopt(sock, SOL_SOCKET, SO_RCVTIMEO, (char*)&nTimeOut, sizeof(nTimeOut));
memset(&addr_in, 0, sizeof(addr_in));
addr_in.sin_family = AF_INET;
addr_in.sin_addr.S_un.S_addr = inet_addr(argv[1]);

if (addr_in.sin_addr.S_un.S_addr == INADDR_NONE)
{
struct hostent *host = NULL;
if ((host = gethostbyname(argv[1])) != NULL)
{
memcpy(&(addr_in.sin_addr), host->h_addr, host->h_length);
}
}
//
memset(&icmpHeader, 0, sizeof(icmpHeader));
icmpHeader.i_type = 8;
icmpHeader.i_code = 0;
icmpHeader.i_cksum = 0;
icmpHeader.i_id = (USHORT)GetCurrentProcessId();
icmpHeader.i_seq = 0;
icmpHeader.timestamp = GetTickCount();
icmpHeader.i_cksum = checksum((USHORT*)&icmpHeader, sizeof(icmpHeader));

rect = sendto(sock, (char*)&icmpHeader, sizeof(icmpHeader), 0, (sockaddr*)&addr_in, sizeof(addr_in));
int addr_from_len;
addr_from_len = sizeof(addr_from);
rect = recvfrom(sock, recvbuf, sizeof(recvbuf), 0, (sockaddr*)&addr_from, &addr_from_len);
DecodeHeader(recvbuf, rect);
closesocket(sock);
WSACleanup();
}

void DecodeHeader(char* buf, int len)
{
ICMP_HEADER *icmpHeader;
IP_HEADER *ipHeader;
IN_ADDR addr;
icmpHeader = (ICMP_HEADER*)(buf+20);
DWORD Time1;

Time1 = GetTickCount();
ipHeader = (IP_HEADER*)malloc(20);
memcpy(ipHeader, buf, 20);
addr.S_un.S_addr = ipHeader->sourceIP;
if (icmpHeader->i_type != 0)
{ printf("No replay!\n"); }
if (icmpHeader->i_id != (USHORT)GetCurrentProcessId())
{ printf("other pocket!\n"); }
printf("Reply from %s: Bytes= %d ", inet_ntoa(addr), len);
printf("TTL = %d Time= %d ms.\n", ipHeader->ttl, Time1-icmpHeader->timestamp );
}
(其中去掉了一些错误判断的地方,呵呵,节约空间)
PING得到的结果包括字节数、反应时间、以及生存时间。Ping程序通过在ICMP报文数据中存放发送请求的时间来计算返回时间。当应答返回时,根据现在时间减去报文中存放的发送时间就得到反应时间了。生存时间(TTL),本来就存放在IP数据报的头部,直接就能够获取。我们能够根据TTL时间来大致判断目标主机的系统类型,以及我们需要到达目的地需要经过几个路由器等等。
但是普通的Ping命令只能对一台主机进行探测,如果是要判断一个大类的网络是否有哪些活动的机器的话,就需要制作一个用来大面积Ping的工具,当然,你可以改进上面的基本程序,或者使用多线程并发来满足大面积Ping的需要。
还有一个Tracert 命令,也非常有用,可以参考以前写的,这里就不再罗嗦了。
关于ICMP协议的其他使用,比如,ICMP拒绝服务攻击等等,以后再讨论。

上一页  [1] [2] [3] [4] [5] [6] 下一页

  • 上一篇文章:
  • 下一篇文章:
  • 最近更新
    固顶文章 爱国者安全网2007年度优秀版主评选
    普通文章 瑞星公司01月11日发布 每日计算机病毒及木马播报
    普通文章 破解博彩神助(专注彩票) V2.8.01
    推荐文章 推荐:跨站脚本执行漏洞代码的六点思路
    普通文章 Windows系统下的远程堆栈溢出 实战篇
    普通文章 Windows系统下的远程堆栈溢出 原理篇
    普通文章 MsSQLServer是如何加密口令的
    普通文章 浅谈国内的渗透评估过程
    普通文章 Dvbbs8.1 0DAY(通杀Access和mssql版本)
    普通文章 微软:我们的代码比赛门铁克更安全
    热门文章
    普通文章提醒:“求职信”病毒1月6日发作
    普通文章两条“蠕虫”蠢蠢欲动
    普通文章5“网银大盗”狂盗储户14万 武汉男子被判10年
    普通文章“木马事件”终告结束 英语学习网重获新生
    普通文章搜索引擎不再喜欢新米,并非只是CN米
    普通文章蠕虫"威金"新变种 "小熊猫"屠宰多个计算机系统
    普通文章元旦上网谨防“Real蛀虫” 通过视频文件传播
    普通文章入侵工具Knark的分析及防范
    普通文章认清本质 计算机病毒防治常遇问题
    普通文章饶过现代Anti-Rookit工具的内核模块扫描(ZT)
    精彩专题