小编Jar*_*und的帖子

在将shell变量传递给另一个命令之前删除前导零

事实证明,iptables不能很好地处理前导零.由于$machinenumber使用它必须在其中有一个前导零用于其他目的,这个想法只是创建一个新的变量($nozero)$machinenumber,其中前导零被剥离.

$machinenumber 是01到24之间的两位数.目前是09

$machinetype 现在是74,并没有造成任何问题.

到目前为止我所拥有的是:

nozero = (echo $machinenumber | sed 's/^0*//')
iptables -t nat -I POSTROUTING -s 10.($machinetype).($nozero).0/24 -j MASQUERADE
Run Code Online (Sandbox Code Playgroud)

虽然我相信我走在正确的轨道上,但代码导致:

ERROR - Unknown string operation
Run Code Online (Sandbox Code Playgroud)

bash strip

40
推荐指数
8
解决办法
6万
查看次数

升级LWP"证书验证失败"后脚本崩溃

我有很多脚本,其中大部分都是基于WWW::Mechanize可以通过HTTP访问的misc硬件中的数据.在升级我的大多数perl安装及其模块之后,使用HTTPS://的所有脚本都因为而破坏了"certificate verify failed"

这是因为较新版本的LWP对证书进行了适当的检查以及 dies是否存在不匹配的事实.

在我的情况下,由于情况,预计失败的证书认证,所以我需要找到一种干净地绕过这种检查的方法.

perl www-mechanize lwp

18
推荐指数
4
解决办法
2万
查看次数

什么是间接对象表示法,为什么它不好,以及如何避免它?

标题几乎总结了,但无论如何这里是长版本.

在发布了一小段perl代码之后,我被告知要避免使用间接对象表示法,"因为它有几个副作用".评论引用了这一特定的行:

my $some_object = new Some::Module(FIELD => 'value');
Run Code Online (Sandbox Code Playgroud)

因为这就是我一直以来的做法,为了与时俱进,我因此问:

  • 这有什么不好的?(特别)
  • 潜在的(可能是负面的)副作用是什么?
  • 应该如何重写该行?

我正要问这位评论者,但对我而言,这是值得发表的.

oop perl coding-style perl5

8
推荐指数
3
解决办法
356
查看次数

带有Tun接口的I/O.

目的是让程序拦截一组IP数据包并读取其原始内容,然后在修改之后将其重新插入网络.

我的方法是基于设置Tuntap接口(Tun,具体),然后让iptables和类似的方法将所需的数据包重定向到这个隧道接口.

出于测试目的,我编写了这个简短的shell脚本来设置Tun接口并添加所需的规则.现在,我打算在我的本地机器发送的任何数据包上测试它,目的地为123.123.123.123.这是启动脚本:

# Set up the tunnel
ip tuntap add dev maintun mode tun
ifconfig maintun inet 10.10.10.1 netmask 255.255.255.0 up

# Mark packets for forwarding to tun
iptables -t mangle -A PREROUTING -d 123.123.123.123 -j MARK --set-mark 2

# Apply ClientRouter table to mark 2 as it's defined in /etc/iproute2/rt_tables
# 201 ClientRouter
ip rule add fwmark 2 table ClientRouter

# Apply gw if to ClienRouter
ip route add default via 10.10.10.1 dev maintun table ClientRouter …
Run Code Online (Sandbox Code Playgroud)

linux shell perl iptables tunnel

7
推荐指数
1
解决办法
1540
查看次数

以列表作为参数进行defun

我正在尝试将Lisp作为我的新语言,并且我遇到了一些问题,如何让函数的各个部分对传递给它的列表的每个元素起作用.

为了学习如何解决这个问题,我试图编写一个相当基本的除法形式,当列表中的一个元素为0时(但只返回0),它不会呱呱叫

(defun divtest (elements)
  (dolist (x elements)
    (if (zerop x) 0 () )
  (/ elements)))))
Run Code Online (Sandbox Code Playgroud)

我尝试将其运行为:

(divtest '(20 2 5))
Run Code Online (Sandbox Code Playgroud)

产量:

*** - /: (20 2 5) is not a number
Run Code Online (Sandbox Code Playgroud)

故障点似乎根源于这样一个事实:我没有在提取列表中的元素之前将它们传递给函数(在这种情况下,既没有/也没有dolist按预期工作,因为x从未计算为0).如果我是对的,有人可以告诉我如何进行这种"提取"吗?


注意:这个问题与我之前提到过的问题有关,但由于我不清楚之前答案的哪一部分实际上允许它按照预期的具体问题工作,我决定进一步深入了解基础知识

lisp common-lisp

6
推荐指数
1
解决办法
8160
查看次数

检查SSH隧道是否已启动并正在运行

我有一个perl脚本,当有点蒸馏时,看起来像这样:

my $randport = int(10000 + rand(1000));          # Random port as other scripts like this run at the same time
my $localip = '192.168.100.' . ($port - 4000);   # Don't ask... backwards compatibility
system("ssh -NL $randport:$localip:23 root\@$ip -o ConnectTimeout=60 -i somekey &");    # create the tunnel in the background

sleep 10;       # Give the tunnel some time to come up

# Create the telnet object
my $telnet = new Net::Telnet(
        Timeout =>      10,
        Host    =>      'localhost',
        Port    =>      $randport,
        Telnetmode …
Run Code Online (Sandbox Code Playgroud)

linux perl telnet ssh-tunnel

6
推荐指数
1
解决办法
8571
查看次数

使用Linux :: TunTap读取数据包

我已经整理了一个perl脚本,通过Linux :: TunTap将数据包读入用户空间,这一切似乎都运行良好:

#!/usr/bin/perl
use warnings;
use strict;
use Linux::TunTap;

$tun = new Linux::TunTap(NAME => 'localtun')
or die "Couldn't connect to IF\n";

while (my $packet = $tun->get_raw()) {
        print Dumper($packet);
}
Run Code Online (Sandbox Code Playgroud)

现在的问题是:如何将表示从tntap设备读取的原始IP数据包的字符串转换为适当的数据结构进行处理?特别是我在源,目的地和序列号之后.

显然,原始IP数据包的原始格式不是很易读.这是通过tuntap接口发送ping后的输出:

{{{?}/??8V?| !"#$%&'()*+,-./0123456ET??@@4

如何从此处继续以编程方式处理此数据?

linux perl tcp-ip tun

6
推荐指数
1
解决办法
342
查看次数

另一个存储过程语法错误 - IF-THEN-ELSE

使用postgresql 8.4,我正在尝试编写一个函数,它看起来像这样:

CREATE OR REPLACE FUNCTION addorupdate( smallint, varchar(7) ) RETURNS void AS
$$
BEGIN
 IF EXISTS (SELECT * FROM consist WHERE slave = $1) THEN
   UPDATE consist SET
    master = $2
    where slave = $1;
 ELSE
   INSERT INTO consist(slave, master) VALUES ( $2, $1 );
 END IF;
END;
$$
LANGUAGE SQL;
Run Code Online (Sandbox Code Playgroud)

但是,它失败了:

ERROR:  syntax error at or near "IF"
LINE 4:  IF EXISTS (SELECT * FROM consist WHERE slave = $1) THEN
Run Code Online (Sandbox Code Playgroud)

...而且我一直在浪费太多的时间和咖啡因来弄清楚为什么并且可以用新鲜的眼睛来帮助我.

如果我不清楚我想要实现什么:奴隶是一列独特的价值观.如果存在,请使用当前主服务器更新它.如果没有,请插入.

更新: 将语言更改为plpgsql,现在抛出:

ERROR:  language "plpgsql" …
Run Code Online (Sandbox Code Playgroud)

postgresql triggers stored-procedures syntax-error plpgsql

5
推荐指数
1
解决办法
3036
查看次数

GdxRuntimeException: #iterator() 不能嵌套使用

我正在开发这款具有World. 这World里面有很多Units

问题源于World服务(除其他外)两个主要任务的事实:

  1. 遍历每一个,Unit以便他们可以根据过去的时间更新他们的属性。
  2. 为每个寻找潜在目标Unit

World,发生这种情况:

for (Actor a : stage.getActors())
{
    a.draw(batch, 1);
    a.act(10);
    findTargets((Unit)a);
}
Run Code Online (Sandbox Code Playgroud)

findTargets() 定义如下:

public ArrayList<Unit> findTargets(Unit source) {
    double sight = source.SIGHT;
    ArrayList<Unit> targets = new ArrayList<Unit>();
    for (Actor a : stage.getActors()) {
        Unit target = (Unit)a;
        if (!(target instanceof Unit))
            continue;

        if (target.equals(source)) continue;
        if (((Unit)target).getPos().dst(source.getPos()) < sight) {
            targets.add((Unit)target);
        }
    }
    return targets;
}
Run Code Online (Sandbox Code Playgroud)

问题很明显:findTargets()还会迭代每个单元,导致嵌套迭代。但是,我不确定我应该如何继续“取消嵌套”这个,因为我只看到了一个问题 22:每个单元实际上都必须迭代每个其他单元以查看它们是否在它们的范围内视线范围。 …

java iteration libgdx

5
推荐指数
1
解决办法
1988
查看次数

为大型数据集中的每个项目选择最新条目

所以,我有一个大约有150万行的表,看起来有点像这样:

name   | time       | data1 | data2  
--------------------------------------
 93-15 | 1337348782 |   11  | 60.791 
 92-02 | 1337348783 |   11  | 62.584 
 92-02 | 1337348056 |   11  | 63.281
 93-15 | 1337348068 |    8  | 65.849
 92-02 | 1337348117 |   11  | 63.271 
 93-15 | 1337348129 |    8  | 65.849 
 92-02 | 1337348176 |   10  | 63.258 
 93-15 | 1337348188 |    8  | 65.849 
 92-02 | 1337348238 |   10  | 63.245 
 93-15 | 1337348248 |    8  | 65.849  
Run Code Online (Sandbox Code Playgroud)

...这些对应于需要监控的事物的历史状态更新.现在,我想做的是找到每个单位的当前状态. …

sql postgresql performance

3
推荐指数
1
解决办法
66
查看次数

从单个整数中提取一组值

我有很多东西(让我们把它们称为节点......没关系),方便地称为node1,node2,... nodeN.

棘手的部分是我需要一个perl子程序,它接受一个引用一组节点的整数.我的方法是:

  1. 每个节点都有一个基于2的幂的值,如下所示:

    • node1 = 1
    • node2 = 2
    • node3 = 4
    • node4 = 8
    • ...
    • node8 = 128
    • 等等
  2. 将每个节点的值相加以生成整数.例如,节点1,3,4和7导致整数为77.

现在,我将如何创建一个采用类似整数的子程序并返回一个节点数组?


PS:

  • 最大节点数是可配置的.16是合理的最大值.
  • 如果我接近这种过于繁琐的方式,我愿意接受建议,以便更好地从单个值生成一组节点.

perl bitwise-operators subroutine

0
推荐指数
1
解决办法
63
查看次数

perl + postgresql代码会导致Pg.pm出现问题

我在尝试将数据插入表中时遇到奇怪的错误,同时处理从不同表中获取的数据:

DBI::st=HASH(0x56261b345948)->_prepare(...): attribute parameter '0' is not a hash ref at /usr/lib/x86_64-linux-gnu/perl5/5.24/DBD/Pg.pm line 277.
Run Code Online (Sandbox Code Playgroud)

似乎导致它的行是上面代码片段中的$ dbh-> do():

 my $sth = $dbh->prepare(
     "SELECT (name, model), serial, firmware, timestamp FROM devicelog 
         WHERE id = $id AND fleet = $fleet AND timestamp >  
             (SELECT timestamp FROM devicelog WHERE fleet = $fleet AND id = $id ORDER BY timestamp DESC LIMIT 1)
             - INTERVAL '50 seconds'"
 );
 $sth->execute();
 while (my @row = $sth->fetchrow_array())
 {

     if (param('savetemplate'))
     {
         $dbh->do('INSERT INTO template (fleet, id, name, model, …
Run Code Online (Sandbox Code Playgroud)

sql postgresql perl dbi

0
推荐指数
1
解决办法
61
查看次数