小编Æðe*_*tan的帖子

IP_TRANSPARENT用法

我正在为LAN上的Raspberry Pi上的所有端口(1-65535)实现透明的TCP / UDP代理。我目前正在测试将目标端口为80的TCP数据包路由到Raspberry Pi。这个想法是,一个接口(参见“代理ip”)捕获到来的流量,而另一个接口(参见“服务器ip”)将其发送到Internet并进行处理,然后再将原始接口发送给客户端。路由器上的必要路由通过

iptables -t mangle -A PREROUTING -p tcp -s SERVER_IP -j ACCEPT
iptables -t mangle -A PREROUTING -p tcp -s SOME_TEST_CLIENT_IP --dport 80 -j MARK --set-mark 3 
ip rule add fwmark 3 table 2 
ip route add default via PROXY_IP dev br0 table 2
Run Code Online (Sandbox Code Playgroud)

受此页面启发。这种架构意味着外部IP地址和Raspberry PI的代理接口之间是一对一的端口映射。数据包到达Raspberry Pi上正确的端口和目的地(已通过tcpdump验证),但是代理不接受连接:没有为传入的SYN发送SYN-ACK。代理侦听套接字主要配置有

const char PROXY_IP_ADDR[] = "192.168.1....";
const char SERVER_IP_ADDR[] = "192.168.1....";
...
struct sockaddr_in saProxy = {0};
saProxy.sin_family = AF_INET;
saProxy.sin_port = htons(80);
inet_pton(AF_INET, PROXY_IP_ADDR, &(saProxy.sin_addr.s_addr));
int enable …
Run Code Online (Sandbox Code Playgroud)

sockets linux proxy

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

处理循环特殊情况

在Java,C#或C++中,假设我们有一个非常常见的情况,我们需要迭代很多次并执行函数doX,但是只有一次迭代我们应该执行函数doY.

int index = 123456;
for(int i = 0; i < 1000000; i++)
{
    if(i == index) doY();
    else doX();
}
Run Code Online (Sandbox Code Playgroud)

在我看到真正的性能问题的情况下,我通常在2中打破循环,但这可能非常痛苦,特别是如果循环的主体很大.编译后的代码是否真的检查每次迭代的条件,还是可以由编译器优化?此外,如果index在编译时不是常量,那么可以进行这样的优化吗?

c c++ java optimization for-loop

4
推荐指数
1
解决办法
421
查看次数

Regex.Replace rufuses用换行符替换

您好,我写了一个非常简单的C#程序,从命令行使用C#Regex,而不是依赖于MS Word搜索和替换.问题是即使正则表达式识别\ r和\n很好,当我尝试用其中任何一个替换字符串时,它似乎用转义字符而不是字符本身替换它.

    [STAThread]
    static void Main(string[] args)
    {
        string initial = Clipboard.GetText();
        Console.Write("Find: ");
        string find = Console.ReadLine();
        Console.Write("Replace: ");
        string replace = Console.ReadLine();
        string final = Regex.Replace(initial, find, replace);
        Clipboard.SetText(final);
    }
Run Code Online (Sandbox Code Playgroud)

例如,我从剪贴板输入的字符串将是"Woodcock,american"(最后带有回车换行符).模式将是@",.+\r",匹配正常,替换字符串将是@"\ r \n".这会产生字符串"Woodcock\r \n"(字母r和n只是为了清楚).我究竟做错了什么?

编辑: Anirudh的答案部分解决了我的问题,并相应地更新了代码.但是,当我向ReadLine输入"\ r \n"时,它似乎也以某种方式转义,而如果我写string replace = "\r\n"它实际上用一个回车换行替换该字符串.链接到新问题:C#ReadLine转义回车/换行?

c# regex

2
推荐指数
1
解决办法
3138
查看次数

标签 统计

c ×1

c# ×1

c++ ×1

for-loop ×1

java ×1

linux ×1

optimization ×1

proxy ×1

regex ×1

sockets ×1