首页 > 系统相关 >Linux开发小工具

Linux开发小工具

时间:2023-09-01 13:56:27浏览次数:36  
标签:addr 端口 开发 socket Linux 进程 工具 include log

Linux系统-部署-运维系列导航

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} 秒!!!")

 

标签:addr,端口,开发,socket,Linux,进程,工具,include,log
From: https://www.cnblogs.com/xiaoyaozhe/p/17671186.html

相关文章

  • Linux DNS配置手册
    Linux系统-部署-运维系列导航关于DNS生效优先级Linux系统中,域名解析相关的配置存在多个地方,经常使用的包括1.本地hosts文件,/etc/hosts,指定将域名解析到特定IP#配置格式ip域名1域名2... 2.dns配置文件,/etc/resolv.conf,指定dns服务器,系统会连接dns服务器查询域名解析......
  • Linux分区、LVM、文件系统(CentOS 7)
    Linux系统-部署-运维系列导航 Linux分区物理磁盘的物理分区包括主分区与扩展分区、逻辑分区一个磁盘只能有4个分区,其中只能有1个扩展分区,所以分区方案为4主或3主1扩展物理分区路径为/dev/磁盘类型+磁盘号+分区号,其中磁盘类型支持hd、sd、vd等,磁盘号为英文字母abcd,分区......
  • 关于为Jetbrains家开发工具建立快捷方式(linux)的两种方法
    前言考虑到jetbrains给出的安装包都是脚本命令语言,即后缀名为sh的文件,每一次打开都要使用Terminal打开,为了方便的打开,我们这里来创建一下快捷方式。方法一这是最为传统的方式,即书写一个desktop的文件,讲路径与图标写进去,授予其执行权限来实现,下面是实现方法。首先我们要创建一......
  • 三河凡科科技飞讯教学篇:学习振弦采集模块的开发基本原理
    三河凡科科技飞讯教学篇:学习振弦采集模块的开发基本原理振弦采集模块是一种用于测量物体振动、形变、压力等物理量的电子设备。它通过测量物体的振动变化,可以得出物体在不同条件下的动态特性,对于工程设计、科学研究、医学检测等领域都有广泛应用。本文将介绍振弦采集模块的开发基......
  • linux内核等待队列详解
    https://www.cnblogs.com/xinghuo123/p/13347964.html等待队列用于使得进程等待某一特定事件的发生,无需频繁的轮询,进程在等待周期中睡眠,当时间发生后由内核自动唤醒。1数据结构1.1等待队列头等待队列结构如下,因为每个等待队列都可以再中断时被修改,因此,在操作等待队列之前必......
  • Linux 主机磁盘繁忙度监控实战shell脚本
    Linux磁盘繁忙度是指磁盘的使用率和活动水平。可以通过一些工具来监测磁盘繁忙度,如iostat、iotop、sar等。其中,iostat是一个常用的工具,可以提供关于磁盘活动的详细统计信息。通过运行命令iostat-x1可以实时监测磁盘的使用情况,其中%util列就表示磁盘的繁忙度,数值越高表......
  • Scrum工具&敏捷软件开发方法
    Scrum工作模式是一种敏捷软件开发方法,其核心是团队合作和自我组织,旨在通过短周期的迭代开发,实现快速反馈和持续改进。Scrum工作模式包括以下角色和活动:1、产品负责人(ProductOwner):负责识别需求,确定产品范围、优先级和用户故事,并与开发团队保持密切沟通。敏捷需求管理示例:2、开发团......
  • Flash开发iOS应用全攻略(五)——如何上传应用到iTunes Connect
    上传IPA到[iTunesConnect](https://itunesconnect.apple.com/WebObjects/iTunesConnect.woa/wo/96.0.9.3.3.2.1.1.3.1.1)上一篇我介绍了[如何在iTunesConnect里准备应用](http://www.adobe.com/cn/devnet/flash/articles/ios_tutorial_4_itunes.html)。最后在这篇文章里我会简单......
  • IOS开发之免费证书+不越狱真机调试
    苹果发布Xcode7之后,可以打开正常的AppleID或实机上载,而不是$99或$299,只要你可以在AppStore下载应用程序的AppleID。关于Mac系统和Xcode的安装,如果不请参见原文描述,这里只介绍使用Xcode7和普通AppID创建免费证书、个人资料。文中测试环境是OSX10.10.5+XCode7正式版本。因此,一......
  • iOS-申请开发证书流程
    1、开发者证书(分为开发和发布两种,类型为iosDevelopment,iosDistribution),这个是最基础的,不论是真机调试,还是上传到appstore都是需要的,是一个基证书,用来证明自己开发者身份的;2、appID,这是每一个应用的独立标识,在设置项中可以配置该应用的权限,比如是否用到了PassBook,GameCenter,以......