限制特定IP访问【BLOCKING BY SPECIFICALLY IP ADDRESS】

本文介绍如何通过修改SQLNet配置文件来阻止特定IP地址连接到Oracle数据库,而不使用防火墙。通过设置tcp.validnode_checking参数开启IP验证,并通过tcp.invited_nodes和tcp.excluded_nodes参数指定允许或拒绝的IP地址。
 If you want to block some connections from specifically ip address and not use fire wall, you can add some parameters in the sqlnet.ora that can achieve  what you want.
 
for example:
/u02/oracle/product/9.2.0/network/admin/sqlnet.ora
# Generated by Oracle configuration tools.

NAMES.DEFAULT_DOMAIN = localdomain

NAMES.DIRECTORY_PATH= (TNSNAMES, ONAMES, HOSTNAME)
#This turns on the hostname/IP checking for your listeners
tcp.validnode_checking=yes
#invited nodes of the  ip address
tcp.invited_nodes=(192.168.11.89,192.168.11.3)

#exclude a list of clients
tcp.excluded_nodes=(192.168.11.100)

remember,you need restart listener.

Just a small tip -:)


要编写一个限制特定高危地区IP地址访问的脚本,我们可以使用C++结合一些库(如poco或asio)来处理网络请求并检查客户端的IP。这里提供一个简化的示例,假设我们有一个预定义的黑名单(IP列表),我们将使用socket编程来拦截这些IP的连接。 ```cpp #include <iostream> #include <string> #include <vector> #include <boost/asio.hpp> // 假设有一个全局的黑名单IP列表 std::vector<std::string> blacklisted_ips = {"192.168.1.1", "10.0.0.2", ...}; // 你需要实际填充 class IpFilter { public: void handle_connection(const boost::asio::ip::tcp::endpoint& client_endpoint) { if (blacklisted_ips.find(client_endpoint.address().to_string()) != blacklisted_ips.end()) { std::cerr << "Blocking connection from high-risk IP: " << client_endpoint.address().to_string() << std::endl; // 在这里关闭连接或者返回错误状态 socket.close(); } else { std::cout << "Accepted connection from: " << client_endpoint.address().to_string() << std::endl; } } private: boost::asio::io_service io_service; boost::asio::ip::tcp::acceptor acceptor(io_service); boost::asio::ip::tcp::socket socket; }; int main() { try { // 初始化Asio服务 boost::asio::io_service io; // 创建TCP服务器监听端口 IpFilter filter; boost::asio::ip::tcp::endpoint endpoint(boost::asio::ip::address_v4::any(), 8080); // 监听任意IPv4端口 filter.acceptor.open(endpoint.protocol()); filter.acceptor.set_option(boost::asio::socket_base::reuse_address(true)); filter.acceptor.bind(endpoint); filter.acceptor.listen(); // 持续接受连接 for (;;) { boost::asio::ip::tcp::socket new_socket(io); filter.acceptor.accept(new_socket, filter.handle_connection); } } catch (const std::exception& e) { std::cerr << "Error: " << e.what() << std::endl; } return 0; } ``` 在这个脚本中,`IpFilter`类创建了一个TCP服务器,监听指定端口。当接收到新的连接时,它会检查客户端IP是否在黑名单中。如果在,就拒绝连接,否则允许连接。 注意,这只是一个基础的示例,实际应用可能需要更复杂的逻辑,比如动态获取IP地理位置、实时更新黑名单等。此外,对于生产环境,通常会使用专门的安全服务(例如防火墙、CDN等)来处理这类限制,而不是直接在应用层面上进行过滤。如果你想要集成到现有的Web服务器框架,可能需要相应的扩展模块支持。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值