• 大小: 7KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-06-10
  • 语言: C/C++
  • 标签:

资源简介

用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


评论

共有 条评论

相关资源