============
== 白菜 ==
============
一个勤奋的代码搬运工!

Docker本地镜像的导出、导入 (export,import,save,load)

Docker

对于镜像的导出和导入,Docker 提供了两种方案,下面分别进行介绍。

一、使用 export 和 import

1,查看本机的容器

使用 docker ps -a 命令查看本机所有的容器。

2,导出镜像

(1)使用 docker export 命令根据容器 ID 将镜像导出成一个文件。

docker export 镜像ID > server.tar

(2)上面命令执行后,可以看到文件已经保存到当前的终端目录下。

3,导入镜像

(1)使用 docker import 命令则可将这个镜像文件导入进来。

docker import - new_server < server.tar

(2)执行 docker images 命令可以看到镜像确实已经导入进来了。

二、使用 save 和 load

1,查看本机的容器

这两个命令是通过镜像来保存、加载镜像文件的。首先我们使用 docker images 命令查看本机所有的镜像。

2,保存镜像

(1)下面使用 docker save 命令根据 ID 将镜像保存成一个文件。

docker save 镜像ID > server.tar

(2)我们还可以同时将多个 image 打包成一个文件,比如下面将镜像库中的 postgres 和 mongo 打包:

docker save -o images.tar postgres mongo

Read more...

Go语言进制以及进制转换

编程学习 Golang

二进制 0B或者0b 表示

var bin1 = 0b1101
package main

import "fmt"

func main(){
	var num01 int = 0b1100
	fmt.Printf("%b的十进制为%d", num01,num01)
}

八进制 0O或者0o 表示

var oct = 0o1234567
package main

import "fmt"

func main(){
	var num01 int = 0o10
	fmt.Printf("%o的十进制为%d", num01,num01)
}

十六进制 0X或者0x 表示

var hex = 0x1234
package main

import "fmt"

func main(){
	var num01 int = 0xf
	fmt.Printf("%x的十进制为%d", num01,num01)
}

进制转换

1. 二进制转八进制  %b -> %o
2. 二进制转十进制  %b ->  %d
3. 二进制转十六进制 %b -> %x
4. 八进制转二进制 %o -> %b
5. 八进制转十进制 %o -> %d
6. 八进制转十六进制 %o -> %x
7. 十进制转二进制 %d -> %b
8. 十进制转八进制 %d -> %o
9. 十进制转十六进制 %d -> %x
10. 十六进制转二进制 %x -> %b
11. 十六进制转八进制 %x -> %o
12. 十六进制转十进制 %x -> %d

// 例
fmt.Printf("十进制%d转成八进制%o",num1,num2)
%b    表示为二进制
%c    该值对应的unicode码值
%d    表示为十进制
%o    表示为八进制
%q    该值对应的单引号括起来的go语法字符字面值,必要时会采用安全的转义表示
%x    表示为十六进制,使用a-f
%X    表示为十六进制,使用A-F
%U    表示为Unicode格式:U+1234,等价于"U+%04X"
%E    用科学计数法表示
%f    用浮点数表示

快速测试 go.dev/play

Read more...

Mac终端查看sqlite3数据库

Shell脚本 mac sqlite

用sqlite命令打开数据库文件

sqlite3 db.file

这样我们就进入了数据库操作,下面的命令都只能是sqlite下的命令,如果输入其他命令,都是无效的。

我们可以输入 .help 先查看下大概的命令:

.help

常用的几种简单命令:

  1. 退出sqlite
.quit
  1. 查看所有表
.tables
  1. 配置情况
.show
  1. 设置查询数据排列格式
.mode list
.mode line 
.mode column
  1. 是否显示头
.headers on

解决 UFW 和 Docker 的问题

debian linux ufw docker

问题

UFW 是一个 iptables 前端,可以非常方便的管理防火墙的规则。但是当安装了 Docker,UFW 无法管理 Docker 发布出来的端口了。

具体现象是:

  1. 在一个对外提供服务的服务器上启用了 UFW,并且默认阻止所有未被允许的传入连接。
  2. 运行了一个 Docker 容器,并且使用 -p 选项来把该容器的某个端口发布到服务器的所有 IP 地址上。比如:docker run -d --name httpd -p 0.0.0.0:8080:80 httpd:alpine 将会运行一个 httpd 服务,并且将容器的 80 端口发布到服务器的 8080 端口上。
  3. UFW 将不会阻止所有对 8080 端口访问的请求,用命令 ufw deny 8080 也无法阻止外部访问这个端口。

这个问题其实挺严重的,这意味着本来只是为了在内部提供服务的一个端口被暴露在公共网络上。

解决 UFW 和 Docker 的问题

撤销原先的修改

如果已经按照目前网络上搜索到解决方案修改过了,请先修改回来,包括:

  1. 启用 Docker 的 iptables 功能,删除所有类似 --iptables=false 的修改,包括 /etc/docker/daemon.json 配置文件。
  2. UFW 的默认 FORWARD 规则改回默认的 DROP,而非 ACCEPT
  3. 删除 UFW 配置文件 /etc/ufw/after.rules 中与 Docker 网络相关的规则。
  4. 如果修改了 Docker 相关的配置文件,重启 Docker。稍后还要修改 UFW 的配置,可以一并重启。

目前新的解决方案只需要修改一个 UFW 配置文件即可,Docker 的所有配置和选项都保持默认。

Read more...

docker 映射某个范围内的端口列表

Docker

在Dockerfile、命令行或docker-compose.yml中,都可以使用类似于8080-8090:8080-8090的格式,来映射多个端口

docker-compose.yml

version: '3.6'
services:
  web:
    image: nginx:1.18
    ports:
      # 将会映射8080到8090这个范围内的端口
      - 8080-8090:8080-8090
    volumes:
      - ./www:/www

命令行

docker run -p 8080-8090:8080-8090 nginx

Dockerfile

Dockerfile

EXPOSE 8080-8090

使用adb命令和电脑互传文件

adb shell

电脑传文件到手机

把当前目录下的test.tex文件传到手机 /sdcard/test目录中

adb push test.txt /sdcard/test

手机文件传到电脑

/sdcard/test/ 目录下的test.txt文件传到本机当前目录test目录中

adb pull /sdcard/test/test.txt ./test

查看手机文件目录

#进入到根目录
adb shell 
#查看所有目录
ls
#进入到sdcard目录,安卓手机的文件管理一般都这这里
cd sdcard 
#然后查看要传输哪些文件到哪个文件夹

查找子域名解析: 子域名探测方法大全

技术分享 子域名 DNS subdomain

子域名探测

通过收集子域名信息来进行渗透是目前常见的一种手法。 子域名信息收集可以通过手工,也可以通过工具,还可以通过普通及漏洞搜索引擎来进行分析。 在挖SRC漏洞时,子域名信息的收集至关重要!

为什么要进行子域名探测?

子域名探测可以帮我们发现渗透测试中更多的服务,这将增加发现漏洞的可能性
查找一些用户上较少,被人遗忘的子域名,其上运行的应用程序可能会使我们发现关键漏洞
通常,同一组织的不同域名/应用程序中存在相同的漏洞
子域名中的常见资产类型一般包括办公系统,邮箱系统,论坛,商城等,其他管理系统,网站管理后台等较少出现在子域名中

子域名探测方法大全

在线接口
暴力枚举
搜索引擎
Certificate Transparency(证书透明)
Subject Alternate Name (SAN) - 主题备用名称
Public datasets(公开数据集)
信息泄露
内容解析(HTML,JavaScript,文件)
DNS解析
区域传送
DNS aggregators(DNS聚合器)
DNS Cache Snooping(域名缓存侦测)
Alterations & permutations(换置 & 排序)
DNSSEC(Domain Name System Security Extensions),DNS安全扩展,DNSSEC区域漫步
CSP HTTP首部
SPF记录
虚拟主机爆破
ASN发现
爬虫 Scraping(抓取)

在线接口

https://crt.sh/
https://censys.io/
https://transparencyreport.google.com/https/certificates
https://dnsdumpster.com/
https://hackertarget.com/find-dns-host-records/
https://x.threatbook.cn/
https://www.virustotal.com/gui/home/search
https://site.ip138.com/baidu.com/domain.htm
https://www.t1h2ua.cn/tools/
http://tool.chinaz.com/subdomain/

暴力枚举

Layer子域名爆破机 Layer是windows下的一款子域名探测工具,其工作原理是利用子域名字典进行爆破,使用简单容易上手。

Amass 工具描述:爆破, google, VirusTotal, alt names

go install github.com/OWASP/Amass/...
amass -d target.com -o $outfile

Knock 工具描述:AXFR, virustotal, 爆破

Read more...

开启 Telegram 的邮箱登录

telegram Email

Telegram的邮箱登录是什么? 有什么用?

邮箱登录就是通过电子邮件获取验证码来登录Telegram账户, 此功能可以在把验证码发送到Telegram客户端的情况下同时向邮箱发送一份验证码, 而不是通过短信发送验证码. 极大减少了Telegram官方的短信费用支出. 对于使用接码的用户来说, 再也不怕没客户端也没手机号的情况下收不到验证码了!

如何开启Telegram邮箱登录?

注意 账号绑定的手机号需要可以接收短信验证码, 否则无法设置邮箱登录

根据官方文档来看,

  • auth.sentCodeTypeSetUpEmailRequired: if the user logins often enough, Telegram will ask the user to verify an email that will be used to send the login code.
  • 当你的登录频率足够高时, Telegram服务器会要求客户端设置邮箱登录

具体方法

  • 使用Telegram官方移动客户端登录, 登录时选择 Tap to get a code via SMS
  • 短信验证码和Telegram客户端验证码一致, 任选其一输入即可, 不需要输入2FA密码, 直接返回重新刷

如果过程中出现 Too many attemps, please try again later 则需要休息一段时间再刷

直到出现让你选择登录邮箱的提示界面

根据提示输入完成邮箱验证码后会向你的账号绑定手机号码发送短信验证码, 输入完即可开启邮箱登录 (2FA可以不输入)

如何判断有没有开启邮箱登录?

在设置-隐私与安全界面,可看到已设置的“登录邮箱”

参考:

Telegram的邮箱登录
User Authorization

Read more...

通过 ADB 卸载系统自带应用(无需Root),精简系统app

adb shell

准备 ADB 使用条件

要使用 ADB(Android 调试桥),你需要按照以下步骤操作:

下载并安装 ADB 工具:

在计算机上安装 Android SDK 或者仅安装 ADB 工具。你可以从 Android 官方网站或者其他可信赖的来源获取它们。
如果你使用 macOS 或 Linux,你可以通过终端使用系统包管理器或 Homebrew 安装 ADB。
如果你使用 Windows,你可以下载 Android Studio,它包含了 ADB 工具。

连接 Android 设备:

使用 USB 线将 Android 设备连接到计算机上。
在 Android 设备上打开开发者选项。这通常需要在设备设置中多次点击“关于手机” -> “版本号”或者类似的选项。一旦开启,返回设置菜单并找到“开发者选项”。
在“开发者选项”中,启用“USB 调试”。

打开命令提示符(Windows)/终端(macOS、Linux):

运行以下命令以确保 ADB 正确识别设备:
adb devices

这应该显示已连接设备的列表。

使用 ADB 列出已经安装的应用程序

打开命令提示符(Windows)/终端(macOS、Linux):

在命令提示符/终端中输入以下命令来列出已安装的应用程序:
adb shell pm list packages

如果你想筛选出包含特定关键词的应用程序,可以使用以下命令:

adb shell pm list packages | grep keyword

将 “keyword” 替换为你想要搜索的关键词。 比如魅族的手机

Read more...

Kubernetes 停止和移除 pod

技术分享 k3s kubectl

停止和移除pod

按名称删除pod

按名称删除kubia-gpu pod:

kubectl delete po kubia-gpu

在删除pod的过程中,实际上我们在指示Kubernetes终止该pod中的所有容器。Kubernetes向进程发送一个SIGTERM信号并等待一定的秒数(默认为30),使其正常关闭。如果它没有及时关闭,则通过SIGKILL终止该进程。因此,为了确保你的进程总是正常关闭,进程需要正确处理SIGTERM信号。

提示

还可以通过指定多个空格分隔的名称来删除多个pod(例如:kubectl delete po pod1 pod2)。

使用标签选择器删除pod

停止 kubia-manual 和 kubia-manual-v2 pod 。这两个pod都包含标签 creation_method=manual ,因此可以通过使用一个标签选择器来删除它们:

kubectl delete po -l creation_method=manual

通过删除整个命名空间来删除pod

以下命令删除custom-namespace:

kubectl delete ns custom-namespace

删除命名空间中的所有pod,但保留命名空间

查看 pods

kubectl get pods

通过使用–all选项告诉Kubernetes删除当前命名空间中的所有pod:

kubectl delete po --all

删除命名空间中的(几乎)所有资源

通过使用单个命令删除当前命名空间中的所有资源,可以删除ReplicationCcontroller和pod,以及我们创建的所有service:

kubectl delete all --all

命令中的第一个all指定正在删除所有资源类型,而–all选项指定将删除所有资源实例,而不是按名称指定它们(我们在运行前一个删除命令时已经使用过此选项)。

注意

使用all关键字删除所有内容并不是真的完全删除所有内容。一些资源会被保留下来,并且需要被明确指定删除。

删除资源时,kubectl将打印它删除的每个资源的名称。

注意

kubectl delete all --all 命令也会删除名为kubernetes的Service,但它应该会在几分钟后自动重新创建。

kubectl 命令演示

kubectl 展示搜索出的pod列表(含pod所在的namespace)

kubectl get pod -A |grep <podname>

[root@node ~]# kubectl get pod -A |grep dashboard
kubernetes-dashboard   dashboard-metrics-scraper-5657497c4c-j5kr8   1/1     Running   0              113m
kubernetes-dashboard   kubernetes-dashboard-78f87ddfc-tlmjv         1/1     Running   0              113m

kubectl 删除pod命令

kubectl delete pod <podname> -n <namespace>

在进行删除pod命令时,会发现pod并未被真正删除,原因是k8s误认为我们要删除的pod异常挂了,会启用容灾机制,导致重新在拉起一个新的pod。 故,我们想要正常且彻底的删除一个pod,必须要先破坏掉他的容灾机制,即删除deployment机制。

Read more...
Previous Page 2 of 9 Next Page