资源简介
用C语言编程实现扫描器,能够扫描局域网中存在的主机、及其开放的端口
代码片段和文件信息
/**********************************************************************
* ホストスキャンプログラム (scanhost.c)
* Ver 2.0 2004钳 7奉 10泣
* 扩侯ˇ螟侯 录怀给瘦 (Yukio Murayama)
*
* 蝗脱钓满今
* 塑プログラムは、TCP/IPプロトコルの池浆、第び、ネットワ〖クプロ
* グラミングの祷墙を羹惧させるためにのみ、そのまま、または、饯赖
* して蝗脱することができます。塑プログラムについて、恕围で敦贿さ
* れているか、または、给进紊炉に瓤するような猖陇、第び、蝗脱を敦
* 贿します。塑プログラムは痰瘦沮です。扩侯荚は塑プログラムによっ
* て券栏したいかなる禄巢についても勒扦を艰ることはできません。
**********************************************************************/
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define CHKADDRESS(_saddr_) \
{\
unsigned char *p = (unsigned char *) &(_saddr_);\
if ((p[0] == 127)\
|| (p[0] == 10)\
|| (p[0] == 172 && 16 <= p[1] && p[1] <= 31)\
|| (p[0] == 192 && p[1] == 168))\
;\
else {\
fprintf(stderr “IP address error.\n“);\
exit(EXIT_FAILURE);\
}\
}
#define BUFSIZE 4096
#define PACKET_LEN 72
enum {CMD_NAME START_IP LAST_IP};
void make_icmp8_packet(struct icmp *icmp int len int n);
void tvsub(struct timeval *out struct timeval *in);
u_int16_t checksum(u_int16_t *data int len);
int main(int argc char *argv[])
{
struct sockaddr_in send_sa; /* 流慨黎のアドレス */
int s; /* ソケットディスクリプタ */
char send_buff[PACKET_LEN]; /* 流慨バッファ */
char recv_buff[BUFSIZE]; /* 减慨バッファ */
int start_ip; /* スキャンするIPアドレスの倡幌猛 */
int end_ip; /* スキャンするIPアドレスの姜位猛 */
int dst_ip; /* スキャンするIPアドレスの猛 */
int on = 1; /* ON */
if (argc != 3) {
fprintf(stderr “usage: %s start_ip last_ip\n“ argv[CMD_NAME]);
exit(EXIT_FAILURE);
}
/* スキャンするIPアドレスの认跋を肋年 */
start_ip = ntohl(inet_addr(argv[START_IP]));
end_ip = ntohl(inet_addr(argv[LAST_IP]));
memset(&send_sa 0 sizeof send_sa);
send_sa.sin_family = AF_INET;
/* ICMP/IP流减慨脱RAWソケットのオ〖プン */
if ((s = socket(AF_INET SOCK_RAW IPPROTO_ICMP)) < 0) {
perror(“socket(SOCK_RAW IPPROTO_ICMP)“);
exit(EXIT_FAILURE);
}
/* BROADCASTパケットも流慨できるようにする */
if (setsockopt(s SOL_SOCKET SO_BROADCAST &on sizeof on) < 0) {
perror(“setsockopt(SOL_SOCKET SO_BROADCAST)“);
exit(EXIT_FAILURE);
}
/*
* スキャンホストメインル〖チン
*/
for (dst_ip = start_ip; dst_ip <= end_ip; dst_ip++) {
int i; /* ル〖プ恃眶 */
send_sa.sin_addr.s_addr = htonl(dst_ip);
CHKADDRESS(send_sa.sin_addr);
for (i = 0; i < 3; i++) {
struct timeval tv; /* 箕癸の攫鼠 */
printf(“scan %s (%d)\r“ inet_ntoa(
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 5938 2008-10-18 22:50 scanport_udp.c
文件 7377 2008-10-18 22:50 scanhost.c
文件 3668 2008-10-18 22:50 scanport_tcp.c
----------- --------- ---------- ----- ----
16983 3
评论
共有 条评论