Category Archives: write up

悄悄话

想写悄悄话好久了,一直没写。
有犹豫是写纸的,还是写现在这样的。
我的字太难看了,所以还是现在这样的吧,写在这里,还能经常更新,乖什么时候想来看看了,就可以来看看【爱心】

以下是正文:

2021/04/09
        你会经常和我说一些小日常,我好喜欢这样,即使有时候只会回表情。。那是因为一时间不知道怎么回复,又想表示收到了、我有在听、这样的。
        其实是有准备在包包里装点话邮过去的,后来你说要来了,就没有这么做。
        我经常会想,你到底是喜欢我哪里,想来想去,想不出来。我好像没有任何。。可以配得上你喜欢的点。。。我问你的话,你可能也答不上来。刷到过一句:为什么乌鸦像写字台,没有理由,也许就是没有理由吧。。。为什么对视上就会想亲亲?没有理由……
        emmm明明感觉有好多话的。。。却写不出来了。。。这次就这样吧。
爱你偶~

一些基础命令

teamserver
keytool -keystore cobaltstrike.store -storepass 123456 -keypass 123456 -genkey -keyalg RSA -alias xxxxxx -dname "CN=, OU=, O=, L=, ST=, C="

cobal
杀进程:powerpick taskkill /f /pid [pid] /t

ssh
tmux new -s cs42
tmux ls
tmux at -t cs42

利用VS的工程文件执行命令

在知识星球看到一个挺s的操作,感觉很有意思,学习一下。原文链接:https://t.zsxq.com/r37YFAY

方法是在[工程名].vcxproj文件中的所有</Link></ItemDefinitionGroup>之间(共四处)插入prebuild事件:
<PreBuildEvent>
<Command>calc</Command>

</PreBuildEvent>
重新打开项目后,编译,就会执行预编译事件中的命令。如下:

现实场景中可以通过向目标发送VS工程并诱导其进行编译以命令执行。

不知道其他IDE是否有类似功能呢0.0

使用ArduinoIDE烧写ESP8266并实现MQTT通讯

包括以下部分:
1、接线
2、烧写Arduino
3、烧写ESP8266
4、实现MQTT通讯

前置工作:将ESP8266的波特率设置为115200

接线
ESP8266的3V3/VCC 接到 3.3V
ESP8266的EN 串联一个10k电阻 接到3.3V
ESP8266的RX 接到 Arduino的RX0
ESP8266的TX 接到 Arduino的TX1
ESP8266的GND 接地
烧写时,ESP8266的GPIO0 接到GND
运行时,GPIO0悬空

烧写Arduino(这一步可能是多余的。。。)
将以下程序按照之前一样的步骤烧写到Arduino中
const int tx = 1;
const int rx = 0;
void setup() {
  pinMode(rx,INPUT_PULLUP);
  pinMode(tx,INPUT_PULLUP);
  Serial.begin(115200);
  Serial.println("Arduino OK");
  delay(1000);
}
void loop() {
}

烧写ESP8266
在ArduinoIDE中安装ESP8266板子,网上已经有很多安装和设置的教程了,不再赘述。
主要记录在烧写过程中出现的问题:
1、烧写前,需要拔出与电脑连接的数据线,并重新插入。
2、插入后按下Arduino板的复位键不松开,点击IDE中的upload,等待直到出现:Hard resetting via RTS pin…字样后,松开复位键。
3、将GPIO0悬空,打开Serial monitor,重新拔插数据线,可以看到ESP8266 OK字样。
4、只有在Arduino处于长按复位键的过程中ESP8266的串口数据才会传到电脑上来。。所以第二步可能是多余的。。。
5、长按Arduino的复位键,可以看到不断有ESP8266 OK字样输出到电脑。
烧写的测试代码如下:
void setup(){
  Serial.begin(115200);
  delay(1000);
}
void loop(){
  Serial.println("ESP8266 OK");
}

实现MQTT通讯
效果如图:

代码放到CSDN:https://blog.csdn.net/qq_42851946/article/details/113295270

如果您有任何其他理解或疑问,请务必按照首页的联系方式联系在下:-)

ArduinoUNO+ESP8266与MQTT服务器通信

全文包括以下几个部分:
1、搭建/配置/测试MQTT服务端
2、Arduino连接WIFI并使用软串口通信
3、在Arduino实现MQTT的PUB客户端
4、总结

搭建/配置/测试MQTT服务端
服务器用的华为学生云,ubuntu系统,感谢华为云orz
114.116.xxx.xxx
apt-add-repository ppa:mosquitto-dev/mosquitto-ppa
apt-get update
apt-get install mosquitto
cd /etc/mosquitto/conf.d
touch myconfig.conf
vim myconfig.conf
allow_anonymous false
password_file /etc/mosquitto/pwfile.txt
port 1883

mosquitto_passwd -c /etc/mosquitto/pwfile.txt [username]
service mosquitto start

调整服务器的安全组,放行来自1883端口的数据
使用python测试服务器和安全组是否正常:
#sub.py
import paho.mqtt.client as mqtt
def on_connect(client, userdata, flags, rc):
    print("Connect result:" + str(rc))
    client.subscribe("test_topic")
def on_message(client, userdata, msg):
    print(msg.topic+":" +str(msg.payload))
client = mqtt.Client("admin_sub")
client.username_pw_set("[username]","[password]")
client.on_connect = on_connect
client.on_message = on_message
print("Connectting…")
client.connect("114.116.***.***", 1883, 60)
client.loop_forever()


#pub.py
import paho.mqtt.client as mqtt
def on_connect(client, userdata, flags, rc):
    print("Connect result:" + str(rc))
def on_message(client, userdata, msg):
    print(msg.topic + " " + str(msg.payload))
client = mqtt.Client("admin_pub")
client.on_connect = on_connect
client.on_message = on_message
client.connect('114.116.***.***', 1883, 60)
client.publish('test_topic', payload='test_pub_content', qos=0)

可以连接/通讯,如图:

Arduino连接WIFI并使用软串口通信
#include <SoftwareSerial.h>
SoftwareSerial wifiSerial(2, 3);
void setup() {
  Serial.begin(9600);
  wifiSerial.begin(9600);
  while(!Serial);
  while(!wifiSerial);
  wifiSerial.println("AT+CWJAP=\"hausahan\",\"[password]\"");
}
void loop() {
  if(wifiSerial.available()) {
    Serial.write(wifiSerial.read());
  }
  if(Serial.available()){
    wifiSerial.write(Serial.read());
  }
}

在昨天的基础上学习了软串口,原来加一行就可以通信了。。
连接成功了,手机上也可以看到已经连接的设备:

在Arduino实现MQTT的PUB客户端
网上能找到的资料都需要烧写ESP8266,因为怕写坏自己唯一的板子,所以尝试造一次轮子。实现软串口+TCP协议的MQTT客户端,站在别人肩膀上先实现Pub功能。参考:
https://blog.csdn.net/Fredric_2014/article/details/89602457
https://blog.csdn.net/anxianfeng55555/article/details/80908795
最终实现效果及代码:

代码放在了CSDN:https://blog.csdn.net/qq_42851946/article/details/112915356

总结
还是有很多让人疑惑的问题的,比如:
ESP8266很多指令执行后必须等几秒才能进行下一步操作。
也有收获:
每次编程后使用AT+RST进行重置并在烧写完成后复位Arduino能解决很多奇怪的问题。
更理解通信协议、wireshark的使用、、、等知识了
下一步:
考虑多买几块8266,学习对直接使用8266的方法,因为看起来好像很方便,并实现一个远程控制LED的Deeeeeemo
🙂

ArduinoUNO连接ESP8266

折腾了两个小时,网上信息很杂,在这里记录正确的方法,如有问题欢迎通过首页的联系方式来交流。

分为以下四部分:
1:接线
2:测试程序
3:AT指令验证
4:使用软串口

接线
需要各种线+10k电阻*1
ESP8266的3V3/VCC 接到 3.3V
ESP8266的EN            串联一个10k电阻  接到3.3V
ESP8266的RX            接到 Arduino的RX0
ESP8266的TX            接到 Arduino的TX1
ESP8266的GND       接地

测试程序
const int tx = 1;
const int rx = 0;
void setup() {
  pinMode(rx,INPUT_PULLUP);
  pinMode(tx,INPUT_PULLUP);
}
void loop() {
}

AT指令验证
将Serial Monitor调整为Both NL&CR,115200 baud
输入AT,ESP8266蓝色灯光闪烁,返回OK
输入AT+GMR,返回版本等信息
如下:

至此,可以验证连接成功。
一些其他常用的AT命令:
AT+RST 重置wifi模块
AT+CWLAP 扫AP
AT+CWJAP=”SSID”,”PASSWORD” 连接到AP
AT+CWJAP=””,”” 与所有访问点断开连接
AT+CIFSR 显示获得的IP和MAC
AT+UART=9600,8,1,0,0 修改波特率等
AT+CWMODE= 设置工作模式,可有Station\AP\Station+AP三种

使用软串口
修改ESP8266的波特率为9600
假设将2,3分别作为RX,TX
则将ESP8266的RX与3(Arduino的TX)相连,反之亦如此
代码:
#include <SoftwareSerial.h>
SoftwareSerial mySerial(2, 3);
void setup() {
  Serial.begin(9600);
  mySerial.begin(9600);
  mySerial.println("AT+GMR");
}
void loop() {
  while(mySerial.available()) {
    Serial.write(mySerial.read());
  }
}

之后打开Serial Monitor即可看到AT+GMR的执行结果了,但是不能实时发命令,如下图:

先到这里吧,实时发送命令等会再解决,休息会儿,头有点晕。。。

如果您有问题请务必与我交流,联系方式在首页,感谢感谢!

P1008 三连击

#include <iostream>
#include <cstring>
using namespace std;

int main(){
        int a[10]={0};
        int i,j,k;
        bool flag = true;

        for(int n=123; n<329; n++){
                memset(a,0,sizeof(a));
                flag = true;

                i=n; j=n*2; k=n*3;
                for(;i>0;i/=10)
                        a[i%10] = 1;
                for(;j>0;j/=10)
                        a[j%10] = 1;
                for(;k>0;k/=10)
                        a[k%10] = 1;

                for(int m=1; m<10; m++)
                        if(a[m]==0)
                                flag=false;

                if(flag)
                        cout << n << " " << n*2 << " " << n*3 << endl;
        }

        return 0;
}

P2181 对角线

#include <iostream>
using namespace std;

int main()
{
        unsigned long long n,sum;
        cin >> n;
        sum = n*(n-1)/2*(n-2)/3*(n-3)/4;
        cout << sum << endl;
        return 0;
}

P1004 方格取数

//别人的AC
#include <iostream>
#include <cstring>
using namespace std;

int N;
int Map[10][10];
int dp[10][10][10][10];

int main()
{
        //init
        int x,y,num;
        cin>>N;
        memset(Map,0,sizeof(Map));
        memset(dp,0,sizeof(dp));

        //input
        while(cin>>x>>y>>num,x!=0&&y!=0&&num!=0)
        {Map[x][y]=num;}

        //dp
        for(int i=1;i<=N;i++)
                for(int j=1;j<=N;j++)
                        for(int k=1;k<=N;k++)
                                for(int l=1;l<=N;l++){
                                        dp[i][j][k][l]=max(
                                        max(dp[i-1][j][k-1][l],dp[i-1][j][k][l-1]),
                                        max(dp[i][j-1][k-1][l],dp[i][j-1][k][l-1]))
                                        +Map[i][j]+Map[k][l];
                                        if(i==k&&j==l) dp[i][j][k][l]-=Map[i][j];
                                }

        //output
        cout<<dp[N][N][N][N];
}
//我的20分:-(
#include <iostream>
using namespace std;

//The block
int N,x,y;
int num[11][11]={0};
//Flag of the first search
int flag[11][11]={0};

//Move function
int move(int x, int y){
        //Add self, mark, and move another step
        int sum=num[x][y], sumx, sumy;
        flag[x][y] = 1;
        if(x<N && y<N){
                sumx = move(x+1,y);
                sumy = move(x, y+1);
        }
        else if(x==N && y<N){
                sumx = 0;
                sumy = move(x, y+1);
        }
        else if(x<N && y==N){
                sumx = move(x+1, y);
                sumy = 0;
        }
        else{
                return num[N][N];
        }

        //Add, and mark
        if(sumx>=sumy){
                sum+=sumx;
                flag[x][y+1] = 0;
        }
        else{
                sum+=sumy;
                flag[x+1][y] = 0;
        }
        return sum;
}

void del(){
        for(int i=0; i<N; i++)
                for(int j=0; j<N; j++){
                        if(flag[i][j]==1 && flag[i+1][j]==1 && flag[i][j+1]==0)
                                num[i][j]=0;
                }
}

int main(){
        //Handle input
        cin >> N;
        for(int i=0; ; i++){
                cin >> x >> y ;
                if(x==0) break;
                else cin >> num[x][y];
        }
        //First move
        int sum;
        sum = move(1,1);
        //del num selected
        del();
        //second move
        sum += move(1,1);
        //Output
        cout << sum << endl;
        return 0;
}

dp,阿吧啊吧啊把