月度归档: 2021 年 7 月

Linux 问题请教。局域网内多个不同 ip+相同端口都指向了同一个服务

局域网( 10.10.10.0/24 )内

软路由是中心网关,ip 是 10.10.10.1,有 qbittorrent 服务,监听在 8080 端口。
一台旧的 thinkpad 笔记本跑了一些服务。ip 是 10.10.10.3,也有 qbittorrent 服务,监听在 8080 端口。
fx N1,ip 是 10.10.10.4,通过 docker 安装了 phpmyadmin 。现在这个容器在宿主机上的监听端口也是 8080 。(没想到没想到,fx 是违 jin 词,打出来提示“抱歉,能不能不要在这里讨论这个”)
问题来了,我访问 10.10.10.1:8080 、10.10.10.3:8080 、10.10.10.4:8080 都指向了 10.10.10.1:8080 这个页面,登录进去也是软路由上 qbit 做种的数据???这是为什么啊……

后来我把 thinkpad 机器上的 qbittorrent 监听端口改成了 8082,访问 10.10.10.3:8082 终于成功(是这台机器上的做种数据了)。但是访问 10.10.10.3:8080 依然成功,且指向 10.10.10.1:8080

诡异的事情,求助大佬们

软路由( 10.10.10.1 )上
root@dkRouter:~# lsof -i:8080
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
qbittorre 9152 ptpt 54u IPv6 21614 0t0 TCP *:8080 (LISTEN)

root@dkRouter:~# netstat -anp |grep 8080
tcp 0 0 :::8080 :::* LISTEN 9152/qbittorrent-no
tcp 0 0 ::ffff:10.10.10.1:8080 ::ffff:10.10.10.168:56367 ESTABLISHED 9152/qbittorrent-no
tcp 0 0 ::ffff:10.10.10.1:8080 ::ffff:10.10.10.168:56363 TIME_WAIT –
tcp 0 0 ::ffff:10.10.10.1:8080 ::ffff:10.10.10.168:56374 ESTABLISHED 9152/qbittorrent-no
tcp 0 0 ::ffff:10.10.10.1:8080 ::ffff:10.10.10.168:56330 ESTABLISHED 9152/qbittorrent-no
tcp 0 0 ::ffff:10.10.10.1:8080 ::ffff:10.10.10.168:56355 ESTABLISHED 9152/qbittorrent-no
tcp 0 0 ::ffff:10.10.10.1:8080 ::ffff:10.10.10.168:56361 TIME_WAIT –
tcp 0 0 ::ffff:10.10.10.1:8080 ::ffff:10.10.10.168:56359 TIME_WAIT –
thinkpad ( 10.10.10.3 )上
root@dk-tpt400:~# lsof -i:8080

root@dk-tpt400:~# lsof -i:8082
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
qbittorre 864 dk 26u IPv6 25624 0t0 TCP *:8082 (LISTEN)

root@dk-tpt400:~# netstat -anp |grep 8080

root@dk-tpt400:~# netstat -anp |grep 8082
tcp6 0 0 :::8082 :::* LISTEN 864/qbittorrent-nox
fx N1 ( 10.10.10.4 )上
root@n1-armbian:/# lsof -i:8080
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
docker-pr 5867 root 4u IPv6 885545 0t0 TCP *:http-alt (LISTEN)

root@n1-armbian:/# netstat -anp |grep 8080
tcp6 0 0 :::8080 :::* LISTEN 5867/docker-proxy
第 1 条附言 · 2 天前
应该是破案了,是upnp 的锅

20210702175400.png

删掉应该就可以了。不过这条是如何生成的,还是不懂。

第 2 条附言 · 2 天前
楼主还是没说清,抱歉。

20210702180103.png

MiniUPnP 的 ACL 中的一条规则导致了如此滑稽的剧情……

第 3 条附言 · 2 天前
见10楼第二张图片,miniupnpd链

tcp协议,dpt:8080 to 10.10.10.1:8080

ps: dpt 应该是 destination port 的意思 (有误请大家指正)

那局域网内如果有主机开机了获取到了ip地址,我访问 10.10.10.x:8080 都会转发到10.10.10.1:8080 且不论 10.10.10.x 这台主机是否有在监听8080端口。

第 4 条附言 · 2 天前
删掉*条附言中框框里的重定向规则就好了

都不用重启防火墙,那边实时删掉了对应的规则

感谢楼里几位大佬相助

ffff 10.10.10.1 TCP 10.10.10.16810 条回复 • 2021-07-02 17:51:52 +08:00
AllenHua 1
AllenHua 2 天前
查了一下 nginx 和 dnsmasq 的配置,也没有发现线索。

其他的话,想不出来运行的程序中可能还有造成这个情况的了
Tink 2
Tink 2 天前 via Android
感觉问题在软路由上,等大佬
AllenHua 3
AllenHua 2 天前
@Tink #2 谢谢大佬回复。

等我晚上回去把 nginx 的配置和 dnsmasq 的配置贴上来。
Nitroethane 4
Nitroethane 2 天前
* 一般情况下以太网中同网段通信的时候流量是不经过路由器的。比如说 10.10.10.3 要发数据包给 10.10.10.4,那么 3 先会发送 ARP 查询的广播包来查询 IP 10.10.10.4 对应的 MAC 地址,然后直接通过 MAC 地址通信(这里描述不是很严谨,数据包只是通过路由器转发,而不会被路由)。(有误请纠正)
* 检查一下软路由的 iptables 。
* 在软路由上用 tcpdump 抓包看看。
weyou 5
weyou 2 天前 via Android
检查软路由 firewall 配置,感觉上是你给.1 添加过端口转发规则并且误把 LAN zone 包含进来了
AllenHua 6
AllenHua 2 天前
@Nitroethane #4 感谢指点

关于*点,应该是这样。计算机网络中学到的就是,10.10.10.0/24 和 10.10.11.0/24 是两个不同的 network,不同的网络才会使路由器的路由功能参与到其中工作。而同网段的设备间通过 arp 地址解析协议,ip 和 mac 地址之间进行转换,只会用到路由器的 package 转发功能。
第二点和第三点不是很会用。tcpdump 用过一次 哈哈。总之非常醍醐灌顶的回复。感谢

就*点,

我现在 macbook ( 10.10.10.168 ) 访问 N1 的 phpmyadmin 服务( 10.10.10.4:8080 ),首先问局域网内谁拥有 10.10.10.4 这个 ip 地址,然后就找对应 mac 地址……难道就找错了人?

我忘了提及一点,10.10.10.3 和 10.10.10.4 这两台机器在 openwrt 中设置了静态地址绑定。

“`
# cat /etc/config/dhcp

config dnsmasq
option domainneeded ‘1’
option localise_queries ‘1’
option rebind_protection ‘1’
option rebind_localhost ‘1’
option local ‘/lan/’
option domain ‘lan’
option expandhosts ‘1’
option authoritative ‘1’
option readethers ‘1’
option leasefile ‘/tmp/dhcp.leases’
option nonwildcard ‘1’
option localservice ‘1’
option filter_aaaa ‘1’
option port ’53’
list server ‘127.0.0.1#53’
option resolvfile ‘/tmp/resolv.conf.auto’

config dhcp ‘lan’
option interface ‘lan’
option start ‘100’
option limit ‘150’
option leasetime ’12h’
option ra_slaac ‘1’
list ra_flags ‘managed-config’
list ra_flags ‘other-config’

config dhcp ‘wan’
option interface ‘wan’
option ignore ‘1’

config odhcpd ‘odhcpd’
option maindhcp ‘0’
option leasefile ‘/tmp/hosts/odhcpd’
option leasetrigger ‘/usr/sbin/odhcpd-update’
option loglevel ‘4’

config srvhost
option srv ‘_vlmcs._tcp’
option target ‘dkRouter’
option port ‘1688’
option class ‘0’
option weight ‘100’

config host
option name ‘t400’
option dns ‘1’
option mac ’00:1c:25:a2:54:c6′
option ip ‘10.10.10.3’
option leasetime ‘infinite’
“`

config host
option name ‘t400’
option dns ‘1’
option mac ’00:1c:25:a2:54:c6′
option ip ‘10.10.10.3’
option leasetime ‘infinite’

可以看到 mac 地址 00:1c:25:a2:54:c6 和 ip 地址 10.10.10.3 做了永久绑定,leasetime 是 infinite 。

fx n1 同理,也做了绑定
AllenHua 7
AllenHua 2 天前
@AllenHua #6 又有另外一个现象存在。thinkpad 和 n1 上对应服务我换了一个端口(比如从 8080 换成 8082 )就直接可以访问了。就 8080 有这个现象
Nitroethane 8
Nitroethane 2 天前
@AllenHua #6 很明显,大概率就是软路由上的 iptables 配置了转发规则,把目的端口为 8080 的所有数据包都转发给了 10.10.10.1,直接查软路由上 iptables 的配置,尤其是所有表的 FORWARD 链
AllenHua 9
AllenHua 2 天前
@weyou #5 刚刚远程访问了下家里 openwrt 软路由,检查了下 firewall 应该没有相关配置。端口转发也是空的

![20210702174534.png]( https://cdn.jsdelivr.net/gh/hellodk34/image@main/img/20210702174534.png)
![20210702174619.png]( https://cdn.jsdelivr.net/gh/hellodk34/image@main/img/20210702174619.png)
![20210702174654.png]( https://cdn.jsdelivr.net/gh/hellodk34/image@main/img/20210702174654.png)
![20210702174711.png]( https://cdn.jsdelivr.net/gh/hellodk34/image@main/img/20210702174711.png)
AllenHua 10
AllenHua 2 天前
@Nitroethane #8

很惊喜,防火墙页面搜到了这两条

![20210702175120.png]( https://cdn.jsdelivr.net/gh/hellodk34/image@main/img/20210702175120.png)
![20210702175140.png]( https://cdn.jsdelivr.net/gh/hellodk34/image@main/img/20210702175140.png)

aliyun 服务器本地磁盘损坏导致数据丢失问题

2019 年初采购的一台带 GPU 的 aliyun 服务器,年费用 3-4 万,当时可能是为了高 io 的性能,数据盘选择了本地磁盘,没选择云磁盘,为这次事故埋下了巨大隐患

昨天 22:11 收到 aliyun 短信报警,磁盘故障,ssh 已无法连接,部分应用还在跑,部分无响应,控制台重启后自动停止,损坏的磁盘挂载目录是 /home,数据众多,出于对大厂的信任,没有太多备份

与工单客服交涉,本地磁盘无备份,损坏了数据丢失无法找回,且在用户协议里写了本地磁盘损坏导致的损失不赔偿

教训:数据无价,定时多重异地备份,不能嫌麻烦,即便是大厂服务器

请教:现在该咋办,工单客服重复表示数据丢失无法找回,请重置示例,是否可以要求提供磁盘自行取出数据?客服确认那是一块单独的物理磁盘,磁盘损坏了

磁盘 损坏 aliyun 备份25 条回复 • 2021-07-05 13:04:27 +08:00
xmumiffy 1
xmumiffy 1 天前 via Android
快照也没开?那就没救了啊
echo1937 2
echo1937 1 天前 via iPhone
如果没记错的话,虚拟机实例的本地磁盘,一旦重启数据就丢失的,这是多心大才会在本地盘上放数据啊?

出于对大厂的信任就更没道理了,云服务商的磁盘也是地球科技,也会坏掉啊。
cucldk 3
cucldk 1 天前
@xmumiffy 本地磁盘不支持快照
cucldk 4
cucldk 1 天前
@echo1937 重启没事,当年买的时候没有重点关注本地磁盘和云磁盘的区别,后来慢慢忘了这茬了
eason1874 5
eason1874 1 天前
本地盘就是物理机,不算云,单点故障是迟早的事,指南都会提示不要单盘存储长期数据,这点是你们大意了,没办法了。

找阿里云看他们能不能帮忙从物理盘恢复数据吧。如果他们不提供这项服务,或者商量能不能直接把硬盘寄给你,你自己找人搞
yitingbai 6
yitingbai 1 天前 ❤️ 15
我要杠一下, 我认为没有备份的数据不算重要数据
CEBBCAT 7
CEBBCAT 1 天前 via Android
@yitingbai 杠到马肚脐眼上了,更常见的是楼主这样的数据备份意识不高的普通用户
love 8
love 1 天前
本地盘 RAID 都没有的吗?
yuguorui96 9
yuguorui96 1 天前
2l 说的没毛病
fredcc 10
fredcc 1 天前 ❤️ 1
就 1 楼和 4 楼回复的使用习惯,不看官方文档的用法。可能不久以后会再来发一帖又丢数据了

lhx2008 11
lhx2008 1 天前
云硬盘都是三副本,基本没啥问题,本地盘一般都做了 RAID,也还行,本地单盘还是挺危险的
opengps 12
opengps 1 天前
这似乎是没办法的结果,本地盘如果要追求*限性能,就不适合多副本。
虽然会有 raid 方案,但是其配置追求*限性能往往采用 raid0 这种顶级的高效率优先方案。
楼主尝试下一个方案:跟阿里云索要这块物理磁盘,看看能否得到支持,如果能拿到物理磁盘,说不定某些高级修复技术可以实现大部分数据的恢复
wtks1 13
wtks1 1 天前 via Android
还是要靠备份,云硬盘也不靠谱啊,我记得上次哪家公司不就被坑了
Showfom 14
Showfom 1 天前
巨大隐患?自己不备份怪谁呢,不备份的数据一律都默认是不重要的数据
villivateur 15
villivateur 1 天前 via Android ❤️ 1
云服务我觉得知道得有一个 raid1 吧?阿里云没有?
villivateur 16
villivateur 1 天前 via Android
@villivateur 至少得有
leafre 17
leafre 1 天前
警告
使用本地盘存储数据有丢失数据的风险,例如 ECS 实例所在物理机发生硬件故障时。请勿在本地盘上存储需要长期保存的业务数据。
建议您在应用层做数据冗余,保证数据的可用性。您可以使用部署集将业务涉及到的几台 ECS 实例分散部署在不同的物理服务器上,保证业务的高可用性和底层容灾能力。具体操作,请参见创建部署集。
如果您的应用无数据可靠性架构设计,强烈建议您在 ECS 实例中同时使用云盘或者备份服务,提高数据可靠性。更多信息,请参见云盘概述或什么是混合云备份。
cucldk 18
cucldk 1 天前
@villivateur 客服答复没有
cucldk 19
cucldk 1 天前
@opengps 嗯,正在工单索要,客服在跟后台申请,等答复,不知道会不会给
salmon5 20
salmon5 1 天前
这个真心不怪阿里云,用户协议已经说的很清楚了;
想保险省事用云盘,3 副本;
想便宜+保险本地盘+主从或者副本集;
想便宜就本地盘裸奔;
RAID 就是个不伦不类的东西;
salmon5 21
salmon5 1 天前
RAID 需要依托硬件结合,这个和云的理念是背道而驰的。
云上很简单:云盘 3 副本;本地盘用户自己做冗余;就这么简单。
salmon5 22
salmon5 23 小时 2 分钟前
我再强调下,免得楼主的标题误导别人:是云使用不当,导致数据丢失;并不是云的问题;
lesismal 23
lesismal 22 小时 33 分钟前
即使使用云盘,重要数据也应当自己备份。
并不是云的问题+1
YaakovZiv 24
YaakovZiv 18 小时 38 分钟前
如果是我,我就不取数据了。
1 、硬盘申请来回邮寄需要花钱和走阿里内部的申请流程。坏盘是否可以留在客户手里。
2 、数据恢复是找专业公司还是自己尝试,这里有费用,时间,也有二次损坏的风险。
3 、不知道数据有多大容量。如果超过 1T,早些部署新的业务开始跑服务。减少业务暂停带来的损失。
现在是两部分损失。即将产生的业务需求无法响应的损失。已经发生的硬盘损坏的损失。我会考虑先减小其中一个损失,避免俩损失加一起,被公司内有心人直接把我干走了。
guo4224 25
guo4224 50 分钟前
连阿里的硬盘都想要,你是有法院判决还是啥…

问问大家关于 PING 的小白问题

假设在节点 A 可以 PING 通节点 B 且节点 B 可以 PING 通节点 A 的情况下,从节点 A 看 PING 节点 B 的延迟和从节点 B 看 PING 节点 A 的延迟一定是一样的吗?

节点 ping 延迟 小白14 条回复 • 2021-07-05 13:29:39 +08:00
asyqm 1
asyqm 2 小时 44 分钟前
感觉不一定一样吧。网络双向速度不一定是对称的。如果同样规模的网络拥堵+非对称速度,那延迟就不一样了。
745839 2
745839 2 小时 40 分钟前
不一定。虽然互通,但是,A 去 B 的路由,和 B 去 A 的不一定一样,延时也会根据链路开销有关系。
myd 3
myd 2 小时 31 分钟前
楼上说的有道理。

网络是动态的:
1. A -> B 的路由会变,B -> A 的路由也会变。
2. 网络拥挤程度也是动态的。

如果来回链路一样,没有网络拥挤,延迟应该是一样的。
hungrybirder 4
hungrybirder 2 小时 29 分钟前
不一定一样啊,来回的路由(线路)可能不同。
aitaii 5
aitaii 2 小时 16 分钟前
得看 A 到 B 的路由,B 到 A 的路由,可以用 tracert 看一下
yanzhiling2001 6
yanzhiling2001 2 小时 12 分钟前
不一样,来回线路不同,ping 结果也不会一样。BGP 动态路由 /负载均衡了解一下
xJogger 7
xJogger 2 小时 10 分钟前 via Android
国庆的前几天的时候,一般是进景点堵,出景点不堵。
网络上也有类似的现象。
另外就是 ping 走的协议和开网页走的协议不一样,所以 ping 的速度和开网页的速度也可能不一样。
个人粗浅理解,欢迎指正。
CRVV 8
CRVV 2 小时 2 分钟前
ping 测的是来回的时间不是单程的时间,和来回链路一不一样没关系。
另外测量单程时间需要两边先对表,ping 根本没有这种高端功能。

> 从节点 A 看 PING 节点 B 的延迟和从节点 B 看 PING 节点 A 的延迟一定是一样的吗

跑一次 ping,基本上每个包的延迟都不一样,所以你要怎么定义 “一定一样” ?
只能说两个方向上用 ping 的测出来的时间是数据包经过了相同的路径花的时间。
但中间的路由器也许会做一些操作让这两种情况的数据包通过的路径不一样。

所以说这些都是没谱的事情,答案当然是不一定一样
raaaaaar 9
raaaaaar 1 小时 46 分钟前 via Android
了解下分组交换,互联网不是像电线网那样是电路交换,线路不建立连接,所以每次走的路由都可能不一样
no1xsyzy 10
no1xsyzy 1 小时 17 分钟前
你就是同样 A > ping B 都会不一样。
还有路由协议启动较慢的问题,*次 ping 可能延迟比之后高得多。

除此以外,还可能遇到软件造成的不同延迟。比如 A 在硬件层面**响应** ICMP,B 在软件层面**响应** ICMP,那就会造成差异。A ping B 会往 B 的 CPU 走一圈。

@CRVV 因为相对论的关系,光速造成延迟还少的对表是科学上没有实证意义的行为,工程上是如何宽松限制的?

zhoudaiyu 11
zhoudaiyu 54 分钟前
@asyqm #1
@745839 #2
@myd #3
@hungrybirder #4
@aitaii #5
@yanzhiling2001 #6
@xJogger #7
@CRVV #8
@raaaaaar #9
@no1xsyzy #10

学到了很多,谢谢大家!如果假定 A 到 B 和 B 到 A 的路由是一样的,A 和 B 硬件和软件性能是相同的,且整个链路只有 A 和 B 两台节点,那是不是 A->B 和 B->A 的延迟近乎就是相同的了?
no1xsyzy 12
no1xsyzy 34 分钟前
@zhoudaiyu 要科学上准确地描述的话,应当是叫「简并」
你做的是测量而不是计算,测量是有误差和不确定度的。除此以外的话,你确实可以说
『 A ping B 和 B ping A 测量的是两个简并的实量』
包括在同一个交换机下接 N 个设备,这 N 个设备间互 ping 也是简并的。
aqqwiyth 13
aqqwiyth 34 分钟前
没有其他干扰的话, 理论上讲是一致的
jorneyr 14
jorneyr 13 分钟前
网络有上下行之别

IOS变量的property属性设置和意义总结

*近有机会对IOS的property属性进行了一个全面的了解和总结:

IOS 的@property和@synthesize帮我们轻易的生成对象的getter和setter方法来完成对对象的赋值和访问。但是如果我们如果要动态设置对象的getter和setter方法可以使用@property和@dynamic组合。对象访问方法property的属性设置非常多,诸如:atomic和nonatomic,readwrite和readonly,retain,assign和copy,strong和weak。

1.atomic 和 nonatomic

atomic是默认的属性,表示对对象的操作属于原子操作,主要是在多线程的环境下,提供多线程访问的安全。我们知道在多线程的下对对象的访问都需要先上锁访问后再解锁,保证不会同时有几个操作针对同一个对象。如果编程中不涉及到多线程,不建议使用,因为使用atomic比nonatomic更耗费系统资源。

nonatomic 表示访问器的访问不是原子操作,不支持多线程访问安全,但是访问性能高。

2.readwrite 和readonly

readwrite 是默认的属性,表示可以对对象进行读和写,会生成对象相应的setter和getter方法。

readonly 表示只允许读取对象的值,只会生成对象的getter方法。

3.retain,assign和copy

retain 表示对NSObject和及其子类对象release旧值,再retain新值,使对象的应用计数增加一。

此属性只能使用于obejective-c类型对象,而不能用于Core Foundation对象。(retain会增加对象的引用计数,而基本数据类型或者Core Foundation对象都没有引用计数,把对象添加到数组中时,引用计数将增加1)。

– (void) setOldValue: (NSString*) newValue {
if (newValue !=oldValue) {
[oldValue release];

oldValue = [newValue retain];

}

}

assign 是默认属性,只可以对基本数据类型(如CGFloat,NSInteger,Bool,int,代理对象)等使用。该方式会对对象直接赋值而不会进行retain操作。

copy 表示重新建立一个新的计数为1的对象,然后释放掉旧的值。

都知道retain是对指针的拷贝,copy是对内容的拷贝。比如:NSString 对象的地址为0x100,其内容为“string”,如果使用copy到另外一个NSString对象,则会生成另外一个地址为0x110的对象,只不过内容仍然是‘string“。如果使用retain到另外一个NSString对象,则该对象的地址仍然为0x100,只不过该对象的计数变为2.

4.strong 和 weak

在ARC的模式下,对象声明时需要加入strong和weak,方便内存的自动管理。默认情况下是strong类型。

strong 强引用,默认的属性,类似于retain,其实是一个相对的概念,就是一个引用。如果有一个强引用持有该对象,则该对象就不能被释放。默认的所有实例变量和局部变量都是strong指针。

weak 弱引用,类似于assign,弱引用除了不决定对象的存亡外,其他与强引用相同。即使一个对象被持有无数个若引用,只要没有强引用指向他,那麽其还是会被清除,它不是对象的拥有者。其值会在对象被释放后自动设置为nil。

weak指针主要用于“父-子”关系,父亲拥有一个儿子的strong指针,因此父亲是儿子的所有者;但为了阻止所有权循环,儿子需要使用weak指针指向父亲。典型例子是delegate模式,你的ViewController通过strong指针(self.view)拥有一个UITableView, UITableView的dataSource和delegate都是weak指针,指向你的ViewController。

IOS多线程实现方式

*近突然想起要提高我们开发的效率,而不是自己硬要像老牛那样勤勤恳恳的一步一步的做。

对于Xcode是我们的开发环境,ok,怎样提高我们的效率呢,当然是使我们Xcode的变得更强大了,而Xcode支持插件,这些插件帮助我们的Xcode,使它变得强大。

首先是下载一个Xcode下面的插件包管理器Package Manager,这个可以帮我们管理Xcode大部分常用的插件。我们可以看到很多插件。当然这些插件不是每个都需要用到下载下来安装。自己安装主要有这些:

CComent,类似与C的注释风格/**/快速注释其实xcode自带一大段代码注释快捷键。command+/键。选中需要注释的段落。

ClangFormat,帮助你调整成Clang风格的代码格式。

CocoaPods,名气在外,帮你管理链接需要用到的开源库,简单易用。

FuzzyAutoComplete,个人觉得非常好用,自动提醒补全你将要输入的函数,变量等。

HOStringSense,输入大文本编辑利器,帮你统计文本字数,自动帮你添加一些特殊字符的转移,换行符等。

KSImageNamed,很好,毕竟我们的应用经常需要与图片打交道,管你工程内部的图片资源,当你使用[UIImage ImageNamed:]时会显示工程中的所有图片,供你选择,帮你填充图片名字,不用自己再哈戳戳的跑到Image文件夹下面看看那个图片文件叫什么名字。

Lin,如果你的应用需要支持多国语言,这是一个利器。当你使用NSLocaLiseString时自动显示你的工程中的所有string,供你选择。

OMClorSense,我们的应用经常要跟颜色打交道吧,当你使用NSColor和UIColor时自动显示你输入的颜色,并且可以显示出颜色拾取器,根据你选择的颜色,自动改变你的代码。

SCCodeMiniMap,将你的代码缩小在编辑区的右部,你可以看到你的整个文件下的代码,可以快速跳转到你选择的代码区域,对于一个文件几大千和上万行的代码的话,还是有一定的作用,不过个人觉得还是Xcode自带的函数调转功能好用。这个东西把代码缩小的太小了,你都不知道写的什么,只是知道个大概的位置。

XAlign,帮助你排版代码,使代码更加整洁。

XcodeBoost,帮组你自己更加定制一些功能,如可以在一个代码片段内,将选中的所有相同的字符串高亮等。

等于编写代码而言,比不是所有的代码都要自己下载,自己通常参考下面的一些网站的代码:

http://code4app.com/ Code4App

https://www.cocoacontrols.com/ cocoacontrols

http://github.ibireme.com/github/list/ios/# github所有开源的Code的一个总结

http://www.google.com.hk 哈哈,google对没错就是它,靠谱些。

http://stackoverflow.com/ 牛逼的网站,google出来的问题很多都是这个上面解决的。

https://developer.apple.com/library/ios/navigation/index.html 当然不能忘了,我们的老本行,苹果的开发者文档。
当然我们也需要其他一些独立的应用来帮助我们提高开发效率了。

PhotoShop , 开发人员有时也需要自己处理一些简单的图片,会点总比不会强,当然我们也不会抢了设计师的饭碗。

ImageOption,有时我们需要缩小我们的开发包,就需要将里面的图片进行缩小,该工具可以将图片尽量不变质的缩小。

IFunBox/iTools,我们有时需要查看真机上面的应用程序中的文件。它可以。

Simpholders,如果我们需要查看我们应用在模拟器运行产生的文件的位置时,是不是很麻烦,先在程序中自己打印文件保存的路径,再自己打开文件自己去找,有了这个,一切都不需要了,它可以保存你*近打开的应用,快速跳转到该应用再mac上面的文件夹的地址。

Charles,搞个破解版的,网络调试的利器,因为我们的很多应用都是需要交互的,都会和服务器进行交互,那就必须用到网络,这个工具可以帮你分享真个网络过程,截获你的网络数据进行分析。

DiffMerge,一个轻量级的文件夹比较工具,做开发的那个没有做过code 的merge。

SQLiteManager,一个数据库的查看工具,你的应用十有八九都会再本地进行数据保存,那十有八九会用到数据库来进行保存。

TextMate/TextWranger,搞开发的十有八九需要用到一个文本编辑的工具,查看各种编码的文本。

TestFlight,一个测试的工具,个人还没有怎么使用过。不过貌似用的人还是很多,好像还能进行版本的管理。

briefs,一个快速的原型设计工具,支持IPhone,IPad,安装下来个人没怎么使用过,

http://www.invisionapp.com/ ,在线的原型设计工具。还不错。

http://www.pttrns.com/categories/17-lists ,一个设计风格的展示网站,可以看各种控件的使用风格。

IOS开发插件和工具总结

*近突然想起要提高我们开发的效率,而不是自己硬要像老牛那样勤勤恳恳的一步一步的做。

对于Xcode是我们的开发环境,ok,怎样提高我们的效率呢,当然是使我们Xcode的变得更强大了,而Xcode支持插件,这些插件帮助我们的Xcode,使它变得强大。

首先是下载一个Xcode下面的插件包管理器Package Manager,这个可以帮我们管理Xcode大部分常用的插件。我们可以看到很多插件。当然这些插件不是每个都需要用到下载下来安装。自己安装主要有这些:

CComent,类似与C的注释风格/**/快速注释其实xcode自带一大段代码注释快捷键。command+/键。选中需要注释的段落。

ClangFormat,帮助你调整成Clang风格的代码格式。

CocoaPods,名气在外,帮你管理链接需要用到的开源库,简单易用。

FuzzyAutoComplete,个人觉得非常好用,自动提醒补全你将要输入的函数,变量等。

HOStringSense,输入大文本编辑利器,帮你统计文本字数,自动帮你添加一些特殊字符的转移,换行符等。

KSImageNamed,很好,毕竟我们的应用经常需要与图片打交道,管你工程内部的图片资源,当你使用[UIImage ImageNamed:]时会显示工程中的所有图片,供你选择,帮你填充图片名字,不用自己再哈戳戳的跑到Image文件夹下面看看那个图片文件叫什么名字。

Lin,如果你的应用需要支持多国语言,这是一个利器。当你使用NSLocaLiseString时自动显示你的工程中的所有string,供你选择。

OMClorSense,我们的应用经常要跟颜色打交道吧,当你使用NSColor和UIColor时自动显示你输入的颜色,并且可以显示出颜色拾取器,根据你选择的颜色,自动改变你的代码。

SCCodeMiniMap,将你的代码缩小在编辑区的右部,你可以看到你的整个文件下的代码,可以快速跳转到你选择的代码区域,对于一个文件几大千和上万行的代码的话,还是有一定的作用,不过个人觉得还是Xcode自带的函数调转功能好用。这个东西把代码缩小的太小了,你都不知道写的什么,只是知道个大概的位置。

XAlign,帮助你排版代码,使代码更加整洁。

XcodeBoost,帮组你自己更加定制一些功能,如可以在一个代码片段内,将选中的所有相同的字符串高亮等。

等于编写代码而言,比不是所有的代码都要自己下载,自己通常参考下面的一些网站的代码:

http://code4app.com/ Code4App

https://www.cocoacontrols.com/ cocoacontrols

http://github.ibireme.com/github/list/ios/# github所有开源的Code的一个总结

http://www.google.com.hk 哈哈,google对没错就是它,靠谱些。

http://stackoverflow.com/ 牛逼的网站,google出来的问题很多都是这个上面解决的。

https://developer.apple.com/library/ios/navigation/index.html 当然不能忘了,我们的老本行,苹果的开发者文档。
当然我们也需要其他一些独立的应用来帮助我们提高开发效率了。

PhotoShop , 开发人员有时也需要自己处理一些简单的图片,会点总比不会强,当然我们也不会抢了设计师的饭碗。

ImageOption,有时我们需要缩小我们的开发包,就需要将里面的图片进行缩小,该工具可以将图片尽量不变质的缩小。

IFunBox/iTools,我们有时需要查看真机上面的应用程序中的文件。它可以。

Simpholders,如果我们需要查看我们应用在模拟器运行产生的文件的位置时,是不是很麻烦,先在程序中自己打印文件保存的路径,再自己打开文件自己去找,有了这个,一切都不需要了,它可以保存你*近打开的应用,快速跳转到该应用再mac上面的文件夹的地址。

Charles,搞个破解版的,网络调试的利器,因为我们的很多应用都是需要交互的,都会和服务器进行交互,那就必须用到网络,这个工具可以帮你分享真个网络过程,截获你的网络数据进行分析。

DiffMerge,一个轻量级的文件夹比较工具,做开发的那个没有做过code 的merge。

SQLiteManager,一个数据库的查看工具,你的应用十有八九都会再本地进行数据保存,那十有八九会用到数据库来进行保存。

TextMate/TextWranger,搞开发的十有八九需要用到一个文本编辑的工具,查看各种编码的文本。

TestFlight,一个测试的工具,个人还没有怎么使用过。不过貌似用的人还是很多,好像还能进行版本的管理。

briefs,一个快速的原型设计工具,支持IPhone,IPad,安装下来个人没怎么使用过,

http://www.invisionapp.com/ ,在线的原型设计工具。还不错。

http://www.pttrns.com/categories/17-lists ,一个设计风格的展示网站,可以看各种控件的使用风格。

iOS越狱插件编写 – 支付宝自动咻咻 (一)

1.安装iOSOpenDev。 安装自行google

2.打开xcode,新建项目,选择iOSOpenDev的模板,这里做一个支付宝的咻咻插件,选择CaptainHook。

3.更改项目中plist的app过滤设置

<dict>
<key>Filter</key>
<dict>
<key>Bundles</key>
<array>
<string>com.alipay.iphoneclient</string>
</array>
</dict>
</dict>

4.打开项目中的.mm文件开始写Hook函数
所有待定的class名替换为

MYMainController

这是咻咻的页面名称

Hook这个页面的viewDidLoad函数,给它加个label用来展示插件信息。

CHOptimizedMethod0(self, void, MYMainController, viewDidLoad){
CHSuper0(MYMainController, viewDidLoad);

UILabel *indicatorLabel = [[UILabel alloc] initWithFrame:CGRectMake(0, 232, 320, 25)];
indicatorLabel.backgroundColor = [UIColor colorWithWhite:1 alpha:0.3];
indicatorLabel.textAlignment = NSTextAlignmentCenter;
indicatorLabel.textColor = [UIColor blackColor];
indicatorLabel.font = [UIFont boldSystemFontOfSize:13];
indicatorLabel.tag = kTagIndicatorLabel;

UIView *view = [(UIViewController*)self view];
[view addSubview:indicatorLabel];

}

Hook点击咻咻按钮的touchup事件,实现点击一次咻咻按钮开始自动咻咻,再点击一次暂停
CHOptimizedMethod0(self, void, MYMainController, action_xiuxiuButtonTouchUp){
CHSuper0(MYMainController, action_xiuxiuButtonTouchUp);
[AlipayTweak shared].targetVC = (UIViewController*)self;
[[AlipayTweak shared] toggleXiuXiu];
}

Hook MYPopupManager的isPerformingPopup,让插件始终运行

CHOptimizedMethod0(self, BOOL, MYPopupManager, isPerformingPopup)
{
return NO;
}

支付宝的咻咻有*小请求间隔,大概3秒左右。我们把它干掉。

CHOptimizedMethod0(self, NSDate*, MYMainSceneManager, lastTriggerDate){
return [NSDate dateWithTimeIntervalSinceNow:-30];
}
总是返回比当前时间要早30秒的时间作为上次发请求的时间

CHConstructor中

CHLoadLateClass(MYMainController); // load class (that will be “available later”)
CHLoadLateClass(MYPopupManager); // load class (that will be “available later”)
<p class=”p1″><span class=”s1″> </span><span class=”s2″>CHLoadLateClass</span><span class=”s1″>(MYMainSceneManager); </span><span class=”s3″>// load class (that will be “available later”)</span></p>
CHHook(0, MYMainController, viewDidLoad); // register hook
CHHook(0, MYMainController, action_xiuxiuButtonTouchUp); // register hook
<p class=”p1″><span class=”s1″> </span><span class=”s2″>CHHook</span><span class=”s1″>(</span><span class=”s3″>0</span><span class=”s1″>, </span><span class=”s4″>MYMainSceneManager</span><span class=”s1″>, </span><span class=”s4″>lastTriggerDate</span><span class=”s1″>); </span><span class=”s5″>// register hook</span></p>
CHHook(0, MYPopupManager, isPerformingPopup); // register hook

主类中添加timer实现自动咻咻功能,不再赘述。

5.破解支付宝9.5.1

注意:支付宝新增加了__RESTRICTED segment,需要用二进制编辑软件重命名,否则不能注入。

iOS 越狱之后无法查看private、var等文件

iOS11的系统越狱之后,用iFunBox查看手机系统的文件,发现找不到private、var等文件。难道是越了个假狱???后面经过查阅一番资料之后,原来越狱之后还需要装一个afc2的补丁。afc2全称(Apple File Conduit 2)afc2补丁是越狱后很重要的一个补丁,有了它才能访问iOS设备的系统文件,获取更高的系统权限。如果没有安装,只能访问 iOS 基础文件系统目录。

%title插图%num

通过Cydia安卓afc2补丁

一、iOS11.0 – iOS11.41的系统安装AFC2的教程

1. 启动 Cydia ,在「软件源」中点击「添加」,手动输入源:「 mrmadtw.github.io/repo/ 」,点击「添加源」,等待添加完成。

2. 在搜索中搜索“Apple File Conduit 2”,并进行安装。

二、iOS 7.1-iOS 10.3.3的系统安装AFC2的教程

安装教程:https://www.i4.cn/news_detail_1623.html

安装了AFC2补丁之后,就可以访问iOS设备的系统文件目录了。

%title插图%num

【iOS逆向】iOS越狱砸壳流程

越狱
安装Cydia Impactor
下载越狱程序(IPA文件):iOS 9.2~9.3.3从这里下载1, iOS 10~10.3.3从这里下载2 3 4
使用Cydia Impactor安装越狱程序
砸壳
iPhone砸壳准备
iPhone启动Cydia,添加frida软件源(https://build.frida.re)来安装frida
Mac砸壳准备
Mac安装frida: sudo pip install frida

Mac安装frida-ios-dump:

从Github下载工程:
sudo mkdir /opt/dump && cd /opt/dump && sudo git clone https://github.com/AloneMonkey/frida-ios-dump
安装依赖:
sudo pip install -r /opt/dump/frida-ios-dump/requirements.txt –upgrade
设置别名:
在终端输入:
vim ~/.bash_profile
在末尾新增下面一段:
alias dump.py=”/opt/dump/frida-ios-dump/dump.py”
使别名生效:
source ~/.bash_profile
Mac终端运行iproxy 2222 22

Mac新建终端运行dump.py [Display name] or dump.py [Bundle identifier],即可

查看手机上安装的app和对应的bundle id: dump.py -l

参考:

https://aberlt.github.io/2017/12/14/记砸壳工具-frida-ios-dump-的使用/
http://bbs.iosre.com/t/frida-ios-dump/11640

Cydia疑难问题修复
运行Cydia,出现错误提示:flAbsPath on /var/lib/dpkg/status failed -realpath (2 no such file or directory)
请参见:
完美解決Cydia跳出Could not open file /var/lib/dpkg/status紅字錯誤

非越狱App集成流程
准备好砸壳后的IPA包
安装好MonkeyDev5:
安装*新的theos:
sudo git clone –recursive https://github.com/theos/theos.git /opt/theos
安装ldid(如安装theos过程安装了ldid,跳过):
brew install ldid
执行MonkeyDev安装命令:
sudo /bin/sh -c “$(curl -fsSL https://raw.githubusercontent.com/AloneMonkey/MonkeyDev/master/bin/md-install)”
使用MonkeyDev模版新建Xcode工程,将IPA包拖入对应的物理文件夹下面,编译
在Mac上使用Reveal来看层级结构
使用class-dump导出IPA包的头文件
直接越狱 iOS 9.2-9.3.3 https://www.efreelife.com/post/elpt50 ↩︎

iOS10~10.3.3越狱工具Meridian https://www.i4.cn/news_detail_18056.html ↩︎

iOS 10.3.3 Jailbreak https://pangu8.com/jailbreak/10.3.3/#DoubleH3lix ↩︎

All iOS Versions Jailbreak https://pangu8.com/jailbreak/ ↩︎

MonkeyDev安装教程 https://github.com/AloneMonkey/MonkeyDev/wiki/安装 ↩︎

Android开发之给控件设置圆角边框

先上效果图:

%title插图%num

具体步骤:

1.在drawable文件夹下新建一个xml文件。

2.在里面填上以下内容:

  1. <?xml version=”1.0″ encoding=”utf-8″?>
  2. <!–自定义的控件圆角背景–>
  3. <shape xmlns:android=“http://schemas.android.com/apk/res/android”>
  4. <solid android:color=“@color/white”/>
  5. <padding android:top=“10px” android:bottom=“10px”/>
  6. <corners android:radius=“50px”/>
  7. <stroke android:width=“1px” android:color=“#f08200”/>
  8. </shape>

3.在xml文件中使用:

%title插图%num

4.注释:

corners ———-圆角

gradient ———-渐变

padding ———-内容离边界距离

size ————大小

solid  ———-填充颜色

stroke ———-描边

注意的是corners的属性bottomLeftRadius为右下角、bottomRightRadius为左下角

shape制作虚线

%title插图%num

没有dashGap属性则为实线

  1. <?xml version=”1.0″ encoding=”utf-8″?>
  2. <shape xmlns:android=“http://schemas.android.com/apk/res/android”
  3. android:shape=“line” >
  4. <stroke
  5. android:dashGap=“3dp”
  6. android:dashWidth=“8dp”
  7. android:width=“1dp”
  8. android:color=“#63a219” />
  9. <size android:height=“1dp” />
  10. </shape>

4.0以上虚线变实线在xml文件中增加:

  1. <TextView
  2. android:layout_width=“match_parent”
  3. android:layout_height=“wrap_content”
  4. android:background=“@drawable/xuxian”
  5. android:layerType=“software” />

 

shape制作渐变

%title插图%num

  1. <?xml version=”1.0″ encoding=”utf-8″?>
  2. <shape xmlns:android=“http://schemas.android.com/apk/res/android” >
  3. <gradient
  4. android:angle=“270.0”
  5. android:endColor=“#ffffff”
  6. android:startColor=“#000000” />
  7. </shape>

 

友情链接: SITEMAP | 旋风加速器官网 | 旋风软件中心 | textarea | 黑洞加速器 | jiaohess | 老王加速器 | 烧饼哥加速器 | 小蓝鸟 | tiktok加速器 | 旋风加速度器 | 旋风加速 | quickq加速器 | 飞驰加速器 | 飞鸟加速器 | 狗急加速器 | hammer加速器 | trafficace | 原子加速器 | 葫芦加速器 | 麦旋风 | 油管加速器 | anycastly | INS加速器 | INS加速器免费版 | 免费vqn加速外网 | 旋风加速器 | 快橙加速器 | 啊哈加速器 | 迷雾通 | 优途加速器 | 海外播 | 坚果加速器 | 海外vqn加速 | 蘑菇加速器 | 毛豆加速器 | 接码平台 | 接码S | 西柚加速器 | 快柠檬加速器 | 黑洞加速 | falemon | 快橙加速器 | anycast加速器 | ibaidu | moneytreeblog | 坚果加速器 | 派币加速器 | 飞鸟加速器 | 毛豆APP | PIKPAK | 安卓vqn免费 | 一元机场加速器 | 一元机场 | 老王加速器 | 黑洞加速器 | 白石山 | 小牛加速器 | 黑洞加速 | 迷雾通官网 | 迷雾通 | 迷雾通加速器 | 十大免费加速神器 | 猎豹加速器 | 蚂蚁加速器 | 坚果加速器 | 黑洞加速 | 银河加速器 | 猎豹加速器 | 海鸥加速器 | 芒果加速器 | 小牛加速器 | 极光加速器 | 黑洞加速 | movabletype中文网 | 猎豹加速器官网 | 烧饼哥加速器官网 | 旋风加速器度器 | 哔咔漫画 | PicACG | 雷霆加速