/** * 扫描器开始工作 * @type 扫描方式 * @arg1, @arg2 由方式解释 */ int scanner_work(int type, int arg1, int arg2) { int i = 0; long k; switch(type) { case SCAN_OPEN_PORT_ONLY: for(i = 0; i < sizeof(open_ports) / sizeof(int); i ++) { scan_one(open_ports[i]); } break; case SCAN_LOW: for(i = 0; i < 1024; i ++) { scan_one(i); } break; case SCAN_HIGH: for(i = 1025; i <= PORT_MAX; i ++) scan_one(i); break; case SCAN_ALL: for(i = 0; i <= PORT_MAX; i ++) scan_one(i); break; case SCAN_PART: for(i = 0; i < 2000; i ++) scan_one(i); break; case SCAN_FIXED: scan_one(arg1); break; case SCAN_RANGE: for(i = arg1; i <= arg2; i ++) scan_one(i); break; case SCAN_LOW_RAND_HIGH: for(i = 0; i < 1024; i ++) scan_one(i); srandom(time(NULL)); for(i = 1025; i <= PORT_MAX; i += 100) { k = random(); k %= 100; scan_one(i + k); } break; default: errno = EINVAL; return -EINVAL; } /*收尾处理*/ over_handle(); return 0; }
int read_proc(unsigned long int * const prcs_run, unsigned long int * const prcs_blked) { char StatBuf[2048], *ptr = &StatBuf[0]; unsigned long int running, blocked; ssize_t len; size_t skip; FILE *stat; *prcs_run = 0; *prcs_blked = 0; if ((stat = fopen("/proc/stat", "r")) == (FILE*)0) { fprintf(stderr, "ERROR: could not open /proc/stat: %s\n", strerror(errno)); return 1; } len = sizeof(StatBuf); while ((len > 0) && (fgets(ptr, len, stat))) { if (ptr[0] != 'p') continue; skip = strlen(ptr); len -= skip; ptr += skip; } fclose(stat); /* These fields are not present in /proc/stat for 2.4 kernels or GNU/kFreeBSD */ running = scan_one(StatBuf, "procs_running"); blocked = scan_one(StatBuf, "procs_blocked"); if (running == ~0UL || blocked == ~0UL) return 1; *prcs_run = running; *prcs_blked = blocked; return 0; }
static void processMemInfo() { scan_one(MemInfoBuf, "MemTotal", &Total); scan_one(MemInfoBuf, "MemFree", &MFree); scan_one(MemInfoBuf, "Buffers", &Buffers); scan_one(MemInfoBuf, "Cached", &Cached); scan_one(MemInfoBuf, "SwapTotal", &STotal); scan_one(MemInfoBuf, "SwapFree", &SFree); Used = Total - MFree; Appl = (Used - (Buffers + Cached)); if(STotal == 0) /* no swap activated */ SUsed = 0; else SUsed = STotal - SFree; Dirty = 0; }