C++僵尸进程与孤儿进程
#include <stdio.h> #include <unistd.h> /* 本程序启动一个子进程,父子进程无限循环不退出 */ /* * 编译:gcc zombie_creator.c -o zombie_creator.exe * 执行:./zombie_creator.exe */ /* * 使用方法 * kill父进程,则子进程变为孤儿进程,可以kill子进程解决 * kill子进程,则子进程变为僵尸进程,可以kill父进程解决 */ int main() { /* fork一个进程,作为子进程 */ printf( "fork a child process\n" ); pid_t pid = fork(); if ( pid > 0 ) { /* 父进程 */ printf( "---i am parent: %d\n", getpid() ); } else if ( pid == 0 ) { /* 子进程 */ printf( "---i am child: %d\n", getpid() ); } /* 死循环,避免进程退出,方便人为操作模拟孤儿进程与僵尸进程 */ while ( 1 ) { sleep( 1 ); } return(0); }
C++TCP端口监听
#include <stdio.h> #include <stdlib.h> #include <errno.h> #include <string.h> #include <sys/socket.h> #include <netinet/in.h> #include <sys/wait.h> #include <sys/types.h> #include <arpa/inet.h> #include <unistd.h> //定义端口号 #define PORT 5000 #define LINK_NUM 5 /* * 编译:gcc tcp_listener.c -o tcp.exe * 执行:./tcp.exe */ int main() { socklen_t sock_fd; int new_fd; socklen_t sin_size; struct sockaddr_in host_addr; struct sockaddr_in client_addr; /* socket创建失败,网络、资源问题等 */ if ( (sock_fd = socket( AF_INET, SOCK_STREAM, 0 ) ) == -1 ) { perror( "socket" ); exit( 1 ); } host_addr.sin_family = AF_INET; host_addr.sin_port = htons( PORT ); host_addr.sin_addr.s_addr = INADDR_ANY; bzero( &(host_addr.sin_zero), 8 ); /* 端口占用 */ if ( bind( sock_fd, (struct sockaddr *) &host_addr, sizeof(struct sockaddr) ) == -1 ) { perror( "bind" ); exit( 1 ); } /* 启动监听失败 */ if ( listen( sock_fd, LINK_NUM ) == -1 ) { perror( "listen" ); exit( 1 ); } while ( 1 ) { sin_size = sizeof(struct sockaddr_in); /* 客户端连接失败 */ if ( (new_fd = accept( sock_fd, (struct sockaddr *) &client_addr, &sin_size ) ) == -1 ) { perror( "accept" ); continue; } printf( "server:got connection from %s\n", inet_ntoa( client_addr.sin_addr ) ); /* 为客户端打开一个子进程 */ if ( !fork() ) { /* 向客户端发送消息 */ if ( send( new_fd, "hello, world, you have connected !\n", 10, 0 ) == -1 ) { perror( "send" ); close( new_fd ); exit( 0 ); } close( new_fd ); } } /* 进程等待结束 */ while ( waitpid( -1, NULL, WNOHANG ) > 0 ) ; return(0); }
Java测试工具
//1.编辑源文件如HelloWorld.java(java要求文件名与类名一致) //2.编译 javac HelloWorld.java,输出 HelloWorld.class //3.执行 java HelloWorld(类名,java会从当前目录class文件查找类的入口函数,但不能指定clsss文件名) /**特别注意:环境变量 CLASSPATH 需要包括当前目录(.),示例如下 export JAVA_HOME=/usr/local/jdk1.8.0_181 export JRE_HOME=${JAVA_HOME}/jre export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib:$CLASSPATH export JAVA_PATH=${JAVA_HOME}/bin:${JRE_HOME}/bin export PATH=$PATH:${JAVA_PATH} **/ import java.util.Date; import java.text.SimpleDateFormat; public class HelloWorld { public static void main(String []args) { System.out.println("Hello World!"); java.util.Date day = new Date(); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); System.out.println(sdf.format(day)); //其他java代码 } }
Python服务扫描工具
#! /usr/bin/python3 # _*_ coding:utf-8 _*_ # python 3.10.5 import socket import time ''' 使用说明: 安装python 3.10环境,运行脚本即可。 注意linux系统部分组件依赖python,默认集成python2,所以需要独立安装python3(不可覆盖python2),推荐使用windows系统运行。 实现过程: 1.配置待扫描的ip网段列表与端口列表 2.将每个网段按照1-255拼接完整ip,逐个扫描端口列表 3.运行日志在当前目录的run.log,其中返回状态为0表示端口可通,返回其他为不通(可能有10035,10060,10061) 4.扫描结果保存在porton.log,portdown.log,分别表示端口开启、关闭的ip列表 ''' # *********************需要配置的部分********************* # # ip前缀列表,当前支持掩码 255.255.255 iplist = ["192.168.11"] # 端口列表 portlist = [80] # *********************需要配置的部分********************* # # 获取当前时间字符串 def getTimeNowString() -> str: ''' 获取当前本地时间的字符串表示:%Y-%m-%d %H:%M:%S ''' return time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()) # 保存列表到文本文件,当前目录 def saveListToFile(fileName: str, list: list) -> None: if fileName == "": fileName = "temp.log" with open(fileName, "w", encoding="utf8") as f: f.write(getTimeNowString() + "\n") f.writelines([f"{line}\n" for line in list]) # 保存日志 def log(content: str): logFile = "run.log" with open(logFile, "a+", encoding="utf8") as f: f.write(f"{content}\n") # 端口打开ip列表 portonlist = [] # 端口关闭ip列表 portdownlist = [] # 设置socket默认超时时间,仅对当前进程有效 socket.setdefaulttimeout(1) # 扫描开始 timeStart = time.time() log(f"----------------------\n{getTimeNowString()} 开始扫描端口") for ip in iplist: for subip in range(1, 256): ipreal = f"{ip}.{subip}" for port in portlist: s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # s.settimeout(2) status = s.connect_ex((ipreal, port)) logstr = f"{ipreal}:{port}={status}" log(f"{getTimeNowString()} {logstr}") if status == 0: portonlist.append(logstr) else: portdownlist.append(logstr) # 及时关闭socket,释放资源 s.close() # 保存结果 log(f"{getTimeNowString()} 开始保存端口开启列表") saveListToFile("porton.log", portonlist) log(f"{getTimeNowString()} 开始保存端口关闭列表") saveListToFile("portdown.log", portdownlist) # 扫描结束 timeEnd = time.time() timeUsed = timeEnd - timeStart log(f"{getTimeNowString()} 扫描完成,耗时 {timeUsed:,.0f} 秒!!!")