要求的专业知识:
一: 精通osi参考模型,精通网络五层:物理层,数据链路层,网络层,传输层,应用层. 精通每一层的协议,数据报格式.精通网络拓扑结构,第一层,第二层,第三层的网 络互联,数据的转发与路由等. 二: 精通c语言程序设计,unix/linux程序设计,网络程序设计.熟悉unix/linux系 统操作,熟悉著名服务的基本配置,特性及使用的端口号.熟悉经典网络命令的使用, 如:netstat,ping,traceroute,netcat,arp等. 三: 精通标准sql语言,熟悉流行的数据库使用,如:oracle,mysql等.掌握数据库与 web语言的结合使用. 有的时候可能要确定一个局域网内有多少台机器是开机的,那么就要依次扫描这个网段内的所有ip.通 常的端口扫描或漏洞扫描的前提是目标主机是开机的,否则所有的扫描都是白费时间.最简单的办法是先 ping一下目标主机.大部分的扫描软件都会在扫描开始前进行与ping类似的测试. 我们要成为真正的黑客,所以我们不会满足于使用别人的程序,我们要理解这里面全部的网络原理,我 们要写自己的程序. 其实这样的程序并不难,我们只要向目标主机发送一个icmp echo请求报文,如果目标主机回应了一 个icmp echoreply报文,则目标主机一定是开机的.那么我们就可以进行后面的扫描工作了. icmp是第三层(网络层)的协议,虽然它与ip协议都在网络层,但icmp数据报依然使用ip报头封装 其报文内容.icmp echo的类型值是8(icmp_echo),代码值是0.我们用程序来完成一个简单的ping. 读到这里,我假想你是完全知道icmp报文的格式的,如果你不知道,那么请你离开,去打点基础再来阅 读,否则纯属浪费时间. 先建一个原始socket,再自已构造一个icmp报文,通过这个原始socket把icmp报文发送出去,然后 用这个原始socket接收目标主机的回应icmp,收到回应,那么进行后面的扫描吧.要说明的是系统内核 会把收到的所有icmp消息给每个icmp原始socket复制一份,也就是说我们程序里创建的icmp raw socket会收到所有的icmp消息,但我们只想等待我们程序里指定的目标主机的icmp echoreply消息, 较好的办法是使用icmp echo报头的标识字段,在构造icmp请求报文的时候,把标识字段(icmp_id)设 为进程号(process id).然后检查收到的每个icmp消息的标识字段,与process id相同的则是我们 等待的报文. raw socket只有superuser可以创建,务必在superuser权限下运行.下面是一段简单的代码,不 过也是完整呈现了ping程序. send_icmp()构造icmp报头并使用raw socket发送.main循环接收icmp消息,交给proc_icmp 判断处理.代码是linux系统上测试通过. 本程序只对一个ip地址进行,如果要对一段ip进行测试,简单修改程序即可.可将发送放在单独的进程 里(使用fork()),send_icmp里做成循环,每次重新初始化struct sockaddr_in.那么对接收到的数据 进行分析的proc_icmp()将多一道对ip报头ip->src字段的判断.具体的修改,留给读者自己完成. 1 /* 2 a simply ping program for unix 3 copyright (c) 2005 by kf_701 4 5 this program is free software; you can redistribute it and/or modify 6 it under the terms of the gnu general public license as published by 7 the free software foundation; either version 2 of the license, or 8 (at your option) any later version. 9 ... 下一页