📄 ip_filter.c
字号:
/*=============================================================
功能:
作者:
王永忠:2001/03/29:规范程序设计
王永忠: 2001/09/26:修改$(WORKDIR)/etc/IP_FILTER为以联行技术表的
方式存储. 以便在网间处理时不再查询数据库系统, 并且不需要
人工维护该文件.
===============================================================*/
#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include "all.h"
#ifdef wyz_mod_010926
#else
#include "db_struct_c.h"
#endif
/***************************************************************
功能:
在地址配置文件中查询指定IP地址是否存在
ENTRY:
IP地址
RETURN:
-1 FAIL
>=0 FOUND
1-- NAS6.0 OR above
2-- NAS5.x
-2 NOT FOUND
****************************************************************/
int ip_filter ( struct in_addr sin_addr )
{
FILE *fp;
char path[128];
#ifdef wyz_mod_010926
struct in_addr sin_addr2;
#else
S_bank_base t_bnk_base;
struct in_addr sin_addr1;
struct in_addr sin_addr2;
#endif
sprintf ( path , "%s/etc/IP_FILTER" , getenv("WORKDIR") );
if ( ( fp = fopen ( path , "r" ) ) == NULL ) {
// errcall ( ERROR , "Unable open etc/IP_FILTER !" );
return -1;
}
while ( !feof(fp) ) {
#ifdef wyz_mod_010926
fscanf ( fp , "%s\n" , path );
inet_aton ( path , &sin_addr2 );
if ( !memcmp ( &sin_addr, &sin_addr2, sizeof(struct in_addr)) ) {
fclose ( fp );
return 0;
}
#else
fread (&t_bnk_base, sizeof(S_bank_base), 1, fp);
inet_aton ( t_bnk_base.tran_ip_addr1, &sin_addr1 );
inet_aton ( t_bnk_base.tran_ip_addr2, &sin_addr2 );
if ( !memcmp(&sin_addr, &sin_addr1, sizeof(struct in_addr)) ||
!memcmp(&sin_addr, &sin_addr2, sizeof(struct in_addr))){
fclose ( fp );
if (memcmp(t_bnk_base.nas_version, "060", 3)>=0)
return 1;
else
return 2;
}
#endif
}
fclose ( fp );
return -2;
}
/***************************************************************
功能:
根据socket ID 取socket地址,在配置文件中查找
ENTRY:
socket ID
RETURN:
-1 FAIL
>0 FOUND
1-- NAS6.0 OR above
2-- NAS5.x
-2 NOT FOUND
****************************************************************/
int sock_filter ( int sock )
{
struct sockaddr_in sin;
int namelen;
namelen=sizeof(struct sockaddr_in);
if ( getpeername ( sock , (struct sockaddr *)&sin , &namelen ) < 0 ) {
errcall ( ERROR , "Unable getpeername !" );
return -1;
}
if ( sin.sin_family != AF_INET ) {
errcall ( ERROR , "getpeername's sa_family isn't AF_INET" );
return -1;
}
return ip_filter ( sin.sin_addr );
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -