MFC写一个IP白名单程序·请问从何入手!

qq_21961039 2017-11-18 04:04:07
本人是菜鸟,写了一个客户端和服务端。来接受数据。
想用服务端进行发送获取IP后做为白名单才可以访问端口。
现在无从入手,请大神帮忙

客户端发送代码:
CString strIP;

CString strSource;
CString Address = "http://city.ip138.com/ip2city.asp";
CInternetSession session("Microsoft Internet Browser", 0);
CHttpFile *myHttpFile = NULL;
myHttpFile = (CHttpFile *)session.OpenURL(Address);
while(myHttpFile->ReadString(strSource))
{
int begin = 0;
begin = strSource.Find('[', 0);
if(begin != -1)
{
int end = strSource.Find(']');
strIP = strSource.Mid(begin+1, end-begin-1);


CString szSendText, szInfo;
m_ServerIP.GetWindowText(szSendText);
if (!szSendText.IsEmpty())
{
szInfo.Format("[白名单]用户IP: %s",strIP);
m_SockClient.Send(szInfo.GetBuffer(szInfo.GetLength()), szInfo.GetLength());
}
}
}


客户端代码,已经可以获取到用户IP,加入白名单!

而服务端,我不知道怎么去写。
接受到数据,如何将IP 加入服务端程序内进行保护!
例如:
服务器 服务端运行后,服务器80端口为封死状态。除非用户运行客户端后获取IP,将IP发送到服务器。
才可以访问80端口
未运行客户端的用户无法访问。请问 客户端需要怎么写!
...全文
652 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
水兮淼淼 2018-03-30
  • 打赏
  • 举报
回复
ICMP协议做个验证吧
赵4老师 2017-11-21
  • 打赏
  • 举报
回复
为什么不使用系统自带的IP过滤策略呢?
汪宁宇 2017-11-21
  • 打赏
  • 举报
回复
引用 楼主 qq_21961039 的回复:
本人是菜鸟,写了一个客户端和服务端。来接受数据。 想用服务端进行发送获取IP后做为白名单才可以访问端口。 现在无从入手,请大神帮忙 客户端发送代码:
CString strIP;
      
    CString strSource;  
    CString Address = "http://city.ip138.com/ip2city.asp";  
    CInternetSession session("Microsoft Internet Browser", 0);  
    CHttpFile *myHttpFile = NULL;  
    myHttpFile = (CHttpFile *)session.OpenURL(Address);  
    while(myHttpFile->ReadString(strSource))  
    {  
        int begin = 0;  
        begin = strSource.Find('[', 0);  
        if(begin != -1)  
        {   
            int end = strSource.Find(']');  
            strIP = strSource.Mid(begin+1, end-begin-1);  
	
			
			CString szSendText, szInfo;
			m_ServerIP.GetWindowText(szSendText);
			if (!szSendText.IsEmpty())
			{
				szInfo.Format("[白名单]用户IP: %s",strIP);
				m_SockClient.Send(szInfo.GetBuffer(szInfo.GetLength()), szInfo.GetLength());
			}
        }  
    }     
客户端代码,已经可以获取到用户IP,加入白名单! 而服务端,我不知道怎么去写。 接受到数据,如何将IP 加入服务端程序内进行保护! 例如: 服务器 服务端运行后,服务器80端口为封死状态。除非用户运行客户端后获取IP,将IP发送到服务器。 才可以访问80端口 未运行客户端的用户无法访问。请问 客户端需要怎么写!
直接在服务端用白名单限制就行了
					
int CALLBACK ConnectAcceptCondition(IN LPWSABUF lpCallerId,
										   IN LPWSABUF lpCallerData,
										   IN OUT LPQOS lpSQOS,
										   IN OUT LPQOS lpGQOS,
										   IN LPWSABUF lpCalleeId,
										   OUT LPWSABUF lpCalleeData,
										   OUT GROUP FAR *g,
										   IN DWORD dwCallbackData)
{

	sockaddr_in* pCaller=(sockaddr_in*)lpCallerId->buf;
	sockaddr_in* pCallee=(sockaddr_in*)lpCalleeId->buf;

	IOCPS* pThis = reinterpret_cast<IOCPS*>(dwCallbackData);

	// Do not take connections from ourself. 
	/*	if ( pCaller->sin_addr.S_un.S_addr == inet_addr("127.0.0.1") ) 
	{
		return CF_REJECT;
	}
	*/
	
	// 
	// Do not send ACK, the attacker do not know if the server exist or not. 
	//
	if ( pThis->IsInBannedList(pCaller) || pThis->IsAlreadyConnected(pCaller) )
	{
		return CF_REJECT;
	}

	return CF_ACCEPT;
}


clientSocket = WSAAccept(pThis->m_sockListen,
						NULL,
						&nLen,ConnectAcceptCondition,(DWORD)pThis); 

ckc 2017-11-19
  • 打赏
  • 举报
回复
这个思路有点麻烦 不应该封闭端口 端口应该一直有效,发现有客户端连接了检查对方ip,如果不在白名单 就关闭连接
qq_21961039 2017-11-19
  • 打赏
  • 举报
回复
引用 1 楼 ckc 的回复:
这个思路有点麻烦 不应该封闭端口 端口应该一直有效,发现有客户端连接了检查对方ip,如果不在白名单 就关闭连接
大概也是这个意思,请问 有办法吗

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧