在CPP中创建代理服务器

时间:2015-05-28 11:58:13

标签: c++ sockets proxy

我想编写一个可以将客户端请求转发给服务器的代理服务器。 我的问题是,服务器验证客户端的src ip。是否有任何可能的方法来保留src ip并将其转发到服务器?

3 个答案:

答案 0 :(得分:1)

这被命名为#34;欺骗"并且通常是一件坏事(对于TCP / HTTP来说非常困难,除非您与服务器或客户端位于同一网络中)。

从技术上讲,在Linux上你可以尝试使用所谓的"原始套接字" (你自己构建整个IP数据包,包括创建虚假的IP报头),但很可能你的欺骗数据包会遇到入口/出口企业和/或ISP过滤器(这反过来可能会引起管理员的注意,特别是如果在公司网络)。

答案 1 :(得分:0)

据推测,既然您要询问代理服务器,那么您希望流量双向传输。虽然有一些技巧,你可以欺骗源IP地址,但你不会从服务器(假设互联网)回到代理,因为你的"返回地址"在别的地方。您也可能会受到DoS扫描仪的注意......

答案 2 :(得分:0)

使用Linux Packet Sockets,您可以发送和接收整个以太网帧。如果保留源和目标MAC地址不变,并将自己的IP设置为0.0.0.0,以便内核不响应流量,则其他系统无法检测到您的系统是内联的。这被称为中间人(MITM)攻击,但它有非邪恶的用途。

This是如何使用数据包套接字的一个很好的示例,但您将使用原始源MAC地址而不是您自己的。

struct ether_header* hdr( reinterpret_cast< const struct ether_header* >( recvd_msg_ptr ) );
memcpy( m_sockaddr.sll_addr, hdr->ether_dhost, ETH_ALEN );