海运的博客

Openwrt下转守护进程runit使用

发布时间:February 11, 2015 // 分类:OpenWrt // No Comments

类似于s6,不过runit在openwrt busybox中自带,需编译openwrt固件时选择。
runsvdir用以扫描指定目录子目录下run脚本并使用runsv启动为守护进程:

runsvdir -P /etc/config/service/

一个openconnect启动脚本示例,注意启动的程序一定要以非守护进程启动且以exec命令执行:

cat /etc/config/service/openconnect/run 
exec 2>&1
exec openconnect -c user-cert.pem -k user-key.pem -s /etc/config/vpnc --no-cert-check www.haiyun.me

如果run目录存在finish脚本,run执行的程序退出后runsv会执行finish并传递程序退出code给finish参数1,然后再重新执行run启动程序,我们可以使用finish判断当网络不通时程序退出状态,避免程序持续启动退出导致死循环:

#!/bin/sh
if [ $1 -eq 255 ]
then
  sleep 5
else
  exit
fi

控制启动的程序,更多见http://smarden.org/runit/sv.8.html

sv status /etc/config/service/openconnect/
sv stop /etc/config/service/openconnect/
sv start /etc/config/service/openconnect/
sv restart /etc/config/service/openconnect/

也可以用runit管理ssh动态隧道转发实现类似于autossh的功能,ssh连接时使用超时控制,超时后ssh关闭runsv会自动重启ssh。
更多示例:
http://smarden.org/runit/runscripts.html

自编译ngrok服务器

发布时间:August 18, 2014 // 分类:网络工具 // 15 Comments

首先安装GO环境,https://www.haiyun.me/archives/1009.html

cd /usr/local/src/
git clone https://github.com/inconshreveable/ngrok.git
export GOPATH=/usr/local/src/ngrok/
export NGROK_DOMAIN="haiyun.me"

生成自签名SSL证书,ngrok为ssl加密连接:

cd ngrok
openssl genrsa -out rootCA.key 2048
openssl req -x509 -new -nodes -key rootCA.key -subj "/CN=$NGROK_DOMAIN" -days 5000 -out rootCA.pem
openssl genrsa -out device.key 2048
openssl req -new -key device.key -subj "/CN=$NGROK_DOMAIN" -out device.csr
openssl x509 -req -in device.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out device.crt -days 5000
cp rootCA.pem assets/client/tls/ngrokroot.crt
cp device.crt assets/server/tls/snakeoil.crt 
cp device.key assets/server/tls/snakeoil.key
GOOS=linux GOARCH=386
make clean
make release-server release-client

如果一直停留在go get gopkg.in/yaml.v1参考:https://www.haiyun.me/archives/1011.html
启动SERVER:

bin/ngrokd -domain="$NGROK_DOMAIN" -httpAddr=":8000" 

交叉编译windows客户端,最好安装最新版本Golang,使用yum安装的一直编译不通过。

cd /usr/local/go/src/
GOOS=windows GOARCH=386 CGO_ENABLED=0 ./make.bash
cd -
GOOS=windows GOARCH=386 make release-server release-client

客户端配置:

server_addr: "haiyun.me:4443"
trust_host_root_certs: false
tunnels:
  http:
    subdomain: "example"
    auth: "user:12345"
    proto:
      http: "80"

  ssh:
    remote_port: 2222
    proto:
      tcp: "22"

启动客户端:

bin/ngrok -config ngrok.conf start http ssh

注意所有domain要一致,不然会出现证书错误:

Failed to read message: remote error: bad certificate

SSH转发远程端口指定监听地址

发布时间:August 18, 2014 // 分类:网络工具 // No Comments

SSH默认转发远程服务器端口时监听loop,只能通过本地访问端口,如:

ssh -R 0.0.0.0:9022:localhost:22 root@haiyun.me

修改配置文件允许自定义监听地址:

echo 'GatewayPorts yes' >> /etc/ssh/sshd_config 
/etc/init.d/sshd restart

穿透内网利器ngrok

发布时间:August 18, 2014 // 分类:网络工具 // No Comments

通过ngrok服务器转发端口到本地80:

ngrok 80

自定义二级域名,需在ngrok官网注册账号获取auth token:

ngrok -authtoken Co1KiaaAdpapgD -subdomain=example 80

转发TCP协议其它端口,

ngrok -authtoken Co1KiaaAdpapgD -proto=tcp 22

指定远程服务器端口:

auth_token: Co1KiaaAdpapgD
tunnels:
  ssh:
    proto:
      tcp: "22"
    remote_port: 52222

启动:

ngrok -config ngrok.conf start ssh

PHP使用Selenium自动化运行chrome/firefox

发布时间:June 26, 2014 // 分类:PHP // 1 Comment

overviewSelenium.png
通过composer安装php-webdriver:

apt install php7.4-cli php-curl php-zip
curl -sS https://getcomposer.org/installer | php --install-dir=/usr/bin/
php composer.phar require php-webdriver/webdriver 

安装java环境和selenium server:

apt install openjdk-14-jre
wget https://selenium-release.storage.googleapis.com/3.141/selenium-server-standalone-3.141.59.jar
java -jar selenium-server-standalone-3.141.59.jar 

安装firefox/chrome浏览器和相应的webdirver:

wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb
apt install ./google-chrome-stable_current_amd64.deb 
wget https://chromedriver.storage.googleapis.com/88.0.4324.96/chromedriver_linux64.zip
unzip chromedriver_linux64.zip 
mv chromedriver /usr/bin/
apt install firefox
wget https://github.com/mozilla/geckodriver/releases/download/v0.29.0/geckodriver-v0.29.0-linux64.tar.gz
tar zxf geckodriver-v0.29.0-linux64.tar.gz 
mv geckodriver /usr/bin/

启动浏览器需X环境支持,可使用XVNCX Window
可以使用Firefox扩展Selenium IDE: PHP Formatters录制脚本。
selenium chrome使用:

<?php
require_once('vendor/autoload.php');
use Facebook\WebDriver\Remote\DesiredCapabilities;
use Facebook\WebDriver\Remote\RemoteWebDriver;
use Facebook\WebDriver\Chrome\ChromeOptions;

$host = 'http://localhost:4444/wd/hub';
$options = new ChromeOptions();
$options->addArguments(array(
        '--no-sandbox',
        '--headless',
        '--start-maximized',
        '--user-data-dir=/tmp/chrome-user-data-dir',
        '--profile-directory=/tmp/chrome-profile-dir',
        '--user-agent=Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.182 Safari/537.36'
));
$caps = DesiredCapabilities::chrome();
$caps->setCapability(ChromeOptions::CAPABILITY, $options);
$driver = RemoteWebDriver::create($host, $caps);
//default
//$driver = RemoteWebDriver::create($host, DesiredCapabilities::chrome());
//$driver->manage()->window()->maximize();
$driver->get('https://www.haiyun.me/');
var_dump($driver->getTitle());
$driver->quit();

selenium firefox使用:

<?php
namespace Facebook\WebDriver;
require 'vendor/autoload.php';
use Facebook\WebDriver\Remote\RemoteWebDriver;
use Facebook\WebDriver\Remote\DesiredCapabilities;
use Facebook\WebDriver\Firefox\FirefoxProfile;
use Facebook\WebDriver\Firefox\FirefoxDriver;

$host = 'http://localhost:4444/wd/hub';
$profile = new FirefoxProfile();
$profile->setPreference('browser.startup.homepage', 'https://github.com/facebook/php-webdriver/');
$profile->setPreference("general.useragent.override", "Mozilla/5.0");
//$profile->addExtension('./vimperator-3.8.2-fx.xpi');
$caps = DesiredCapabilities::firefox(); 
$caps->setCapability(FirefoxDriver::PROFILE, $profile); 
$caps->setCapability('moz:firefoxOptions', ['args' => ['-headless']]);
$caps->setCapability('moz:firefoxOptions', ['args' => ["-profile", "/tmp/firefox_profile"]]);
$driver = RemoteWebDriver::create($host, $caps);

//default
//$driver = RemoteWebDriver::create($host, DesiredCapabilities::firefox());
$driver->manage()->window()->maximize();
$driver->get('https://www.haiyun.me/');
var_dump($driver->getTitle());
$driver->quit();

文档:
https://github.com/php-webdriver/php-webdriver/wiki
https://php-webdriver.github.io/php-webdriver/

分类
最新文章
最近回复
  • opnfense: 谢谢博主!!!解决问题了!!!我之前一直以为内置的odhcp6就是唯一管理ipv6的方式
  • liyk: 这个方法获取的IPv6大概20分钟之后就会失效,默认路由先消失,然后Global IPV6再消失
  • 海运: 不好意思,没有。
  • zongboa: 您好,請問一下有immortalwrt設定guest Wi-Fi的GUI教學嗎?感謝您。
  • 海运: 恩山有很多。
  • swsend: 大佬可以分享一下固件吗,谢谢。
  • Jimmy: 方法一 nghtp3步骤需要改成如下才能编译成功: git clone https://git...
  • 海运: 地址格式和udpxy一样,udpxy和msd_lite能用这个就能用。
  • 1: 怎么用 编译后的程序在家里路由器内任意一台设备上运行就可以吗?比如笔记本电脑 m参数是笔记本的...
  • 孤狼: ups_status_set: seems that UPS [BK650M2-CH] is ...