咸鱼

咸鱼是以盐腌渍后,晒干的鱼

0%

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 默认
$ sudo nmap 192.168.1.88

# 检查指定端口范围
$ sudo nmap -p1880-9002 192.168.1.88

# 检查指定端口,多个用逗号隔开
$ sudo nmap -p1883,9001 192.168.1.88

# 迅速检查网站是否正常运行
$ sudo nmap -sS 192.168.1.88

# 检查在目标系统上运行的服务
$ sudo nmap -sV 192.168.1.88

# 检查目标系统的打开端口
$ sudo nmap -vv 192.168.1.88

环境

全新的Ubuntu 16.04,所需编译环境:

1
$ sudo apt-get install build-essential openssl libssl-dev libc-ares-dev uuid-dev cmake -y

安装libwebsockets

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20

$ wget https://warmcat.com/git/libwebsockets/snapshot/libwebsockets-3.0.0.tar.gz

$ tar -zxvf libwebsockets-3.0.0.tar.gz

$ cd libwebsockets-3.0.0

$ mkdir build

$ cd build

$ cmake ..

$ make

$ sudo make install

# 使库文件软链接立刻生效
$ sudo ldconfig

阅读全文 »

在上一篇文章《6、基于truffle框架部署合约》中,我们已经实现了部署一个简单的合约(sayhello和add),并且在控制台可以调用合约的函数。

本文将使用 《5.1、基于Ganache-Cli用Remix发布Token(代币)》 中sol代码,编译一个比较完整的合约,部署。

修改工程配置

  1. sol代码加入到工程
  2. 修改 1_initial_migration.js文件
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    var Token = artifacts.require("./Token.sol");
    var StandardToken = artifacts.require("./StandardToken.sol");
    var TeaToken = artifacts.require("./TeaToken.sol");

    module.exports = function(deployer) {
    deployer.deploy(Migrations);
    deployer.deploy(Token);
    deployer.deploy(StandardToken);

    //四个参数,是TeaToken的构造函数参数。
    deployer.deploy(TeaToken,"10000000000000000000000","BBCoin",18,"BBC");
    };
    TeaToken的构造函数
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    function TeaToken(
    uint256 _initialAmount, //发行量
    string _tokenName, //token名称
    uint8 _decimalUnits, //小数位
    string _tokenSymbol //标识
    ) {
    // Give the creator all initial tokens
    balances[msg.sender] = _initialAmount;

    // Update total supply
    totalSupply = _initialAmount;

    // Set the name for display purposes
    name = _tokenName;
    // Amount of decimals for display purposes
    decimals = _decimalUnits;

    // Set the symbol for display purposes
    symbol = _tokenSymbol;
    }

编译部署

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
$ truffle compile
$
$ truffle migrate --reset
Using network 'development'.

Running migration: 1_initial_migration.js
Replacing Migrations...
... 0x026473e96e19f2a0a32bc787a9cd5ef7c29cab71e5517e803c29b18d6cb08070
Migrations: 0xe70fc286df987d4eace8dc486cc5492c950e50c6
Deploying Token...
... 0xf503e2b6663ade73b5a60ff7f6b82f6f1e87b07e2629bf5fad6a7bc654cb807b
Token: 0x75aa2709dcee2bcd4fcc530924e0fb90e83a58f5
Deploying StandardToken...
... 0x4385d77ebae77be6efe0b65cf925f40bfaa0e0f518518745a4813d92204c2271
StandardToken: 0x2e6487e4d995dbba857362c7a0542bb76a6f11ae
Deploying TeaToken...
... 0x3687702e5287e22cafd2d6ae3e41d0c3455b1306bca805541b2de174c5841a70
TeaToken: 0x6b528b7717777a90f4db0a96be268fc91610be35
Saving successful migration to network...
... 0x374db95d4ff26b0f9a817fd48dfa2e648193333091a92fb001c6338b9f2b49ee
Saving artifacts...
阅读全文 »

本文启动 ganache-cli

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
$ ganache-cli
Ganache CLI v6.1.0 (ganache-core: 2.1.0)

Available Accounts
==================
(0) 0xef1e0310ecf99c3808940d351b8a4bd7566d0a71
(1) 0xa91b4c17ff43421754a8b721a8e55ac2881d946b
(2) 0x0a6d612ce9d06ee9bced7395f29b0167e059207e
(3) 0xd64f06e3a98a41bea2a6fa290e742083206ee061
(4) 0xd315be81ca72314a2434df898fe962e6b53db337
(5) 0xd4b54a13c047214bfae17ee2e25bbe4891edf582
(6) 0x630b76b384c423c231bbc3384b1333369296eff9
(7) 0x5f10c0cc0a914d9e5711a4ae022c27f4be7013d4
(8) 0xd7c06d6f55c44125a11d7d203bb24c86f786b37d
(9) 0x2fc8126d7ea755089dc7337fe956f2f0369a205b

Private Keys
==================
(0) 82d925b9235dcf17d2e7cb0907084bf44fa9ce7ab31a9d2375b5db75e2da0509
(1) 3f02535f00fa0ab48c306e561491cb4e10c684cea0297ec23aa4e87322108723
(2) a0c830651cac356ce0a1a1d471ae0a77d2f0cfbb869dbd2d7650d4827becf879
(3) 60a0a77161316406a5c03453d9e85427357f4046939bd4f884561cc806a4dccf
(4) 7914c24a44119f21071b2a7da59a4b07a8c665475b995e0491bf62e7b1cc0403
(5) bc512c5af4b68021be1ea084e93acf87fd3c1dea4a3ad1eec60cc0ba408f5ac0
(6) 2f1831f2ab30d0b091a4dced5dcac68c79fad0352727a5ab4edd694c3a9d4bd7
(7) 963d08d6060e01eb9223e742f12955daf00f5cc54220001ce75353a50a017968
(8) e3d724fa1a859afda107e9be2e3b0d5703705436bae1057280b8363bc6929fd8
(9) 6a661a59913f97e6fbd9cc4d56e8fc4d6c098d7be14254d788a5917cfe498bfd

HD Wallet
==================
Mnemonic: penalty until vessel limit motor waste rule ability soft moral stem harsh
Base HD Path: m/44'/60'/0'/0/{account_index}

Listening on localhost:8545

编译合约

打开remix,一样编译三个sol代码文件(参考上文)。

部署合约

阅读全文 »

Ropsten Test Net 一样,现在我们在私有链发布一个Token,私有链前面使用了Geth来实现,本文通过 ganache来作为本地测试私有链。
ganache 是一个基于内存的以太坊链,用于本地测试,安装简单,不用去连接测试网络,省去同步以太坊区块的麻烦。

最关键是为后面的truffle框架做铺垫。

安装运行

  1. ganache 是GUI程序。(需要nodejs环境)

    下载地址 https://github.com/trufflesuite/ganache/releases

    支持Linux、Mac和Windows ,本文直接安装Windows的,启动就可以,运行后默认创建10个账号,每个账号里有100ETH的余额。

    ganache.png

    默认是127.0.0.1,只有本地能访问,修改为WLAN局域网内可以访问。

    ganache_conf.png

  2. ganache-cli 是字符终端程序(需要nodejs环境)

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    $ npm install -g ganache-cli
    $ ganache-cli
    Ganache CLI v6.1.0 (ganache-core: 2.1.0)

    Available Accounts
    ==================
    (0) 0xef1e0310ecf99c3808940d351b8a4bd7566d0a71
    (1) 0xa91b4c17ff43421754a8b721a8e55ac2881d946b
    (2) 0x0a6d612ce9d06ee9bced7395f29b0167e059207e
    (3) 0xd64f06e3a98a41bea2a6fa290e742083206ee061
    (4) 0xd315be81ca72314a2434df898fe962e6b53db337
    (5) 0xd4b54a13c047214bfae17ee2e25bbe4891edf582
    (6) 0x630b76b384c423c231bbc3384b1333369296eff9
    (7) 0x5f10c0cc0a914d9e5711a4ae022c27f4be7013d4
    (8) 0xd7c06d6f55c44125a11d7d203bb24c86f786b37d
    (9) 0x2fc8126d7ea755089dc7337fe956f2f0369a205b

    Private Keys
    ==================
    (0) 82d925b9235dcf17d2e7cb0907084bf44fa9ce7ab31a9d2375b5db75e2da0509
    (1) 3f02535f00fa0ab48c306e561491cb4e10c684cea0297ec23aa4e87322108723
    (2) a0c830651cac356ce0a1a1d471ae0a77d2f0cfbb869dbd2d7650d4827becf879
    (3) 60a0a77161316406a5c03453d9e85427357f4046939bd4f884561cc806a4dccf
    (4) 7914c24a44119f21071b2a7da59a4b07a8c665475b995e0491bf62e7b1cc0403
    (5) bc512c5af4b68021be1ea084e93acf87fd3c1dea4a3ad1eec60cc0ba408f5ac0
    (6) 2f1831f2ab30d0b091a4dced5dcac68c79fad0352727a5ab4edd694c3a9d4bd7
    (7) 963d08d6060e01eb9223e742f12955daf00f5cc54220001ce75353a50a017968
    (8) e3d724fa1a859afda107e9be2e3b0d5703705436bae1057280b8363bc6929fd8
    (9) 6a661a59913f97e6fbd9cc4d56e8fc4d6c098d7be14254d788a5917cfe498bfd

    HD Wallet
    ==================
    Mnemonic: penalty until vessel limit motor waste rule ability soft moral stem harsh
    Base HD Path: m/44'/60'/0'/0/{account_index}

    Listening on localhost:8545

参考《以太坊发token教程》
本文只记录操作流程,在Ropsten Test Net下操作(非私有链),用MetaMask和Remix-ide来完成发行部署。

准备工作

  1. 安装MetaMask钱包,在Ropsten网络创建和登录账号( 0xBCdc478c31Bb569AFc9ed986E869f62A117a4Cae ),这个账号将会是我们的智能合约的所有者,token发行数量都是存入到这个账号.
  2. 在MetaMask的Buy按钮,去领一些以太坊测试币(request 1 eth from faucet 按钮点一次领一个币),用于部署合约。

编写Token的合约代码

接口(ERC20标准)

阅读全文 »

原文
Android P 为用户和开发者引入众多新特性和新功能。

本文重点介绍面向开发者的新功能。 要了解新 API,请阅读 API 差异报告或访问 Android API 参考 — 为醒目起见,将突出显示新 API。 请务必查阅 Android P 行为变更以了解平台变更可能给您的应用带来哪些方面的影响。

利用 Wi-Fi RTT 进行室内定位

Android P 添加了对 IEEE 802.11mc Wi-Fi 协议(也称为 Wi-Fi Round-Trip-Time (RTT))的平台支持,从而让您的应用可以利用室内定位功能。
在提供硬件支持的 Android P 设备上,应用可以使用全新的 RTT API 来测量与附近支持 RTT 的 Wi-Fi 接入点 (AP) 的距离。 设备必须已启用定位并开启了 Wi-Fi 扫描(在 Settings > Location 下),同时您的应用必须具有 ACCESS_FINE_LOCATION 权限。 设备不需要连接至 AP 即可使用 RTT。 为保证隐私性,只有手机可以确定与 AP 的距离;AP 不具备该信息。

如果您的设备测量与 3 个或更多 AP 的距离,您可以使用一个多点定位算法来预估与这些测量值最相符的设备位置。 结果通常精准至 1 至 2 米。

阅读全文 »

参考:request-custom

在Android中,使用Volley来请求JSON数据,Volley自带 StringRequest JsonObjectRequest JsonArrayRequest JsonRequest

GET示例

自定义Request,就是在Request中使用Gson把数据处理为对象,返回给调用者。示例 GsonRequestSample.java (GET Request):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
//代码来自:https://developer.android.google.cn/training/volley/request-custom
import com.android.volley.AuthFailureError;
import com.android.volley.NetworkResponse;
import com.android.volley.ParseError;
import com.android.volley.Request;
import com.android.volley.Response;
import com.android.volley.toolbox.HttpHeaderParser;
import com.google.gson.Gson;
import com.google.gson.JsonSyntaxException;

import java.io.UnsupportedEncodingException;
import java.util.Map;

public class GsonRequestSample<T> extends Request<T> {

private final Gson gson = new Gson();
private final Class<T> clazz;
private final Map<String, String> headers;
private final Response.Listener<T> listener;


/**
* Make a GET request and return a parsed object from JSON.
*
* @param url URL of the request to make
* @param clazz Relevant class object, for Gson's reflection
* @param headers Map of request headers
*/

public GsonRequestSample(String url, Class<T> clazz, Map<String, String> headers,
Response.Listener<T> listener, Response.ErrorListener errorListener) {
super(Method.GET, url, errorListener);
this.clazz = clazz;
this.headers = headers;
this.listener = listener;
}

@Override
public Map<String, String> getHeaders() throws AuthFailureError {
return headers != null ? headers : super.getHeaders();
}

@Override
protected void deliverResponse(T response) {
listener.onResponse(response);
}
@Override
protected Response<T> parseNetworkResponse(NetworkResponse response) {
try {
String json = new String(
response.data,
HttpHeaderParser.parseCharset(response.headers));
return Response.success(
gson.fromJson(json, clazz),
HttpHeaderParser.parseCacheHeaders(response));
} catch (UnsupportedEncodingException e) {
return Response.error(new ParseError(e));
} catch (JsonSyntaxException e) {
return Response.error(new ParseError(e));
}
}
}

阅读全文 »

摘录: https://developer.android.google.cn/training/articles/security-ssl

安全套接字层 (SSL)(现在技术上称为传输层安全协议 (TLS))是一个通用构建块,用于在客户端与服务器之间进行加密通信。应用很可能以错误的方式使用 SSL,从而导致恶意实体能够拦截网络上的应用数据。为了帮助您确保您的应用不会出现这种情况,本文重点介绍了使用安全网络协议的常见陷阱,并解决对使用公钥基础结构 (PKI) 关注较多的问题。

概念

在典型的 SSL 使用场景中,会使用一个包含公钥及与其匹配的私钥的证书配置服务器。作为 SSL 客户端与服务器握手的一部分,服务器将通过使用公钥加密签署其证书来证明自己具有私钥。

不过,任何人都可以生成他们自己的证书和私钥,因此,一个简单的握手只能说明服务器知道与证书公钥匹配的私钥,除此之外什么都证明不了。解决此问题的一个方法是让客户端拥有其信任的一个或多个证书集。如果证书不在此集合中,则不会信任服务器。

阅读全文 »

对于已知的 TLS/SSL 漏洞和错配置,可以通过 Nogotofail 轻松确认您的应用程序是否安全。它是一款自动执行的工具,功能强大并且可扩展,用于测试通过它传送网络流量的任意设备的网络安全问题。

Nogotofail 可用于三个主要用例:

  • 查找错误和漏洞。
  • 验证修复并监测回归。
  • 了解哪些应用和设备正在生成哪些流量。

Nogotofail 适用于 Android、iOS、Linux、Windows、Chrome 操作系统、OSX。事实上,任何用于连接互联网的设备都可以使用 Nogotofail。在 Android 和 Linux 上提供了一个易于使用的客户端来配置设置和获取通知,同时还提供了一个本身可作为路由器、VPN 服务器或代理部署的攻击引擎。

您可以在 Nogotofail 开源项目网站上访问此工具。

阅读全文 »

标你妹

地址
在线,自动生成标注,上传psd自动生成标注。

蓝湖

地址
在线,自动生成标注/切图,还有原型制作/逻辑连线,支持Sketch 和 Photoshop 设计图,通过插件上传即可实现自动标注。

  1. spring-boot-examples

    Github

  2. spring-boot-quick
    Github
    基于springboot的快速学习示例,整合各种LZ遇到的开源框架,如:
    rabbitmq、jpa、redies、oauth2、swagger、jsp、docker、spring-batch、异常处理、日志输出、多模块开发、多环境打包等等

摘:可能很多人正在犹豫,在服务治理的时候应该选择那个框架呢?如果公司对效率有极高的要求建议使用 Dubbo,相对比 RPC 的效率会比 HTTP 高很多;如果团队不想对技术架构做大的改造建议使用 Dubbo,Dubbo 仅仅需要少量的修改就可以融入到内部系统的架构中。但如果技术团队喜欢挑战新技术,建议选择 Spring Cloud,Spring Cloud 架构体系有有趣很酷的技术。如果公司选择微服务架构去重构整个技术体系,那么 Spring Cloud 是当仁不让之选,它可以说是目前最好的微服务框架没有之一。——出自《阿里Dubbo疯狂更新,关Spring Cloud什么事?

Dubbo性能高(RPC ),轻量级,设计的也很自由,开发者可以各种DIY,比如,他的注册中心,甚至可以用Redis来做。

Spring Cloud 是一个生态,要使用各种组件来组成整个服务,因为服务之间是基于HTTP通讯的,所以没有RPC 那么高效率,求的是一个稳。

总结:

中小型项目可以用Dubbo来快速实现,而且现在Dubbo已经支持SpringBoot。

阅读全文 »

  1. spring-cloud-examples

    Github

  2. SpringCloud入门系列(第 001 篇)

    博客

  3. Spring Cloud入门到实战系列教程(猿天地尹吉欢)

    博客

  4. Java生态研究(Spring Boot + Redis + Dubbo + RocketMQ)

    Github

  5. 基于Spring+SpringMVC+Mybatis分布式敏捷开发系统架构(参考实战)

    Github

  6. spring cloud 脚手架

    Github

markdown文档很多时候要流程图,不用图片,用字符就可以显示,如:

1
2
3
+--------+  request   +--------+
| client | ---------> | server |
+--------+ +--------+

那么如何画这种图?

Easy DSL的语法描述图像

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
$ apt-get install libgraph-easy-perl
$
$ graph-easy <<< '[ client ] - request -> [ server ]'
+--------+ request +--------+
| client | ---------> | server |
+--------+ +--------+
$
$
$
$ vim simple.txt
[ A ], [ B ], [ C ] --> [ D ]
$
$ graph-easy simple.txt
+---+ +---+ +---+
| A | --> | D | <-- | C |
+---+ +---+ +---+
^
|
|
+---+
| B |
+---+
阅读全文 »