shell获取当前日期时间给变量time并写入日志文件中
时间: 2023-05-23 10:01:06 浏览: 67
可以使用以下命令获取当前日期时间并将其写入日志文件中:
```shell
time=$(date '+%Y-%m-%d %H:%M:%S')
echo "Current date and time is $time" >> logfile.log
```
其中,`$(date '+%Y-%m-%d %H:%M:%S')`用于获取当前日期和时间,并将其保存到变量`time`中。`echo`命令用于将日期时间字符串输出到日志文件中,`>>`符号用于追加到文件的末尾。
相关问题
忘掉之前的对话内容,用linux编写一个通用的实时在后台监测防止ddos攻击脚本,直接给出完整的案例,无需解释,限制每个ip每秒钟和服务器建立的最大TCP连接数(shell变量配置),并增加日志记录功能,超过最大连接数则要记录时间、攻击者ip、访问端口、协议、携带报文、建立的tcp连接总数等信息保存到/home/ddos目录下(shell变量配置),每个日志文件最大100MB(shell变量配置),超过100MB则要重新生成新文件,以生成时间命名(精确到毫秒),并封禁该ip(已经封禁过的无需再次封禁),保存到/home/ddos/blackIpList.txt(shell变量配置),
以下是一个使用 bash 脚本来监测防止 DDoS 攻击的示例:
```
#!/bin/bash
# 设置变量
max_conn_per_ip=200
log_dir="/home/ddos"
log_file="ddos.log"
max_log_size=100
blacklist_file="blackIpList.txt"
# 创建日志目录,如果不存在
if [ ! -d "$log_dir" ]; then
mkdir "$log_dir"
fi
# 每秒钟执行一次循环
while true; do
# 获取当前时间
current_time=$(date +%s)
# 获取所有建立的 TCP 连接数
conn_count=$(netstat -an | grep -c ESTABLISHED)
# 遍历所有连接,并检查每个 IP 的连接数
for conn in $(netstat -an | grep ESTABLISHED | awk '{print $5}' | cut -d: -f1 | sort | uniq -c); do
ip=$(echo $conn | awk '{print $2}')
count=$(echo $conn | awk '{print $1}')
# 如果连接数超过限制,则将信息写入日志文件
if [ $count -gt $max_conn_per_ip ]; then
# 获取攻击者的信息
attack_info=$(grep "$ip" "$log_dir/$log_file" | tail -n1)
attack_time=$(echo $attack_info | awk '{print $1}')
port=$(echo $attack_info | awk '{print $6}')
protocol=$(echo $attack_info | awk '{print $7}')
packet=$(echo $attack_info | awk '{print $8}')
# 如果超过一分钟,则将信息写入日志
if [ $(($current_time - $attack_time)) -gt 60 ]; then
echo "$current_time $ip $port $protocol $packet $count" >> "$log_dir/$log_file"
# 如果日志文件大小超过限制,则重新生成新文件
log_size=$(du -m "$log_dir/$log_file" | awk '{print $1}')
if [ $log
用linux编写一个通用的实时在后台监测防止ddos攻击脚本,直接给出完整的案例,无需解释,要求有白名单列表,多个白名单用逗号隔开,排除本地所有网卡ip,每20秒钟检测一次(shell变量配置),限制每个ip每秒钟和服务器建立的最大TCP连接数(shell变量配置),并增加日志记录功能,超过最大连接数则要记录时间、攻击者ip、访问端口、协议、携带报文、建立的tcp连接总数等信息保存到/home/ddos目录下(shell变量配置),每个日志文件最大100MB(shell变量配置,自动清理3天以前的日志),超过100MB则要重新生成新文件,以生成时间命名(精确到毫秒),并使用iptables立即封禁该ip(已经封禁过的无需再次封禁),保存到/home/ddos/blackIpList.txt(shell变量配置),以上代码中文件或者目录不存在的需要自动进行创建,灵活发挥,减少人工干预和出错概率
下面是一个示例的脚本,请注意这个脚本是给出的一个实现思路,您可以根据自己的需要做相应的修改:
```
#!/bin/bash
# 定义变量
WHITE_LIST="127.0.0.1,172.10.1.1"
INTERVAL=20
MAX_TCP_CONN=5
DDOS_DIR="/home/ddos"
LOG_FILE_SIZE=100
BLACK_IP_FILE="$DDOS_DIR/blackIpList.txt"
# 如果目录不存在,则创建目录
if [ ! -d "$DDOS_DIR" ]; then
mkdir "$DDOS_DIR"
fi
# 清理3天以前的日志
find "$DDOS_DIR" -name "*.log" -mtime +3 -delete
# 循环检测
while true; do
# 获取当前时间
current_time=$(date "+%Y-%m-%d %H:%M:%S")
# 获取所有网卡的IP地址
all_ips=$(ifconfig | grep -Eo 'inet (addr:)?([0-9]*\.){3}[0-9]*' | grep -Eo '([0-9]*\.){3}[0-9]*')
# 枚举所有IP地址
for ip in $all_ips; do
# 如果是白名单中的IP地址,则跳过
if [[ $WHITE_LIST =~ (^|,)$ip(,|$) ]]; then
continue
fi
# 获取当前IP地址的连接数
conn_count=$(netstat -an | grep "$ip" | wc -l)
# 如果连接数大于限制,则记录日志并封禁IP
if [ $conn_count -gt $MAX_TCP_CONN ]; then
# 获取攻击者的详细信息
attack_info=$(netstat -anp | grep "$ip")
# 将信息写入日志文件
log_file="$DDOS_DIR/$(date "+%Y%m%d%H%M%S").log"
echo "$current_time $ip $attack_info" >> "$log_file