本人是菜鳥,寫了一個客戶端和服務端。來接受資料。
想用服務端進行發送獲取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埠
未運行客戶端的用戶無法訪問。請問 客戶端需要怎么寫!
uj5u.com熱心網友回復:
這個思路有點麻煩不應該封閉埠
埠應該一直有效,發現有客戶端連接了檢查對方ip,如果不在白名單
就關閉連接
uj5u.com熱心網友回復:
大概也是這個意思,請問 有辦法嗎
uj5u.com熱心網友回復:
為什么不使用系統自帶的IP過濾策略呢?uj5u.com熱心網友回復:
直接在服務端用白名單限制就行了
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);
uj5u.com熱心網友回復:
ICMP協議做個驗證吧轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/72197.html
標籤:網絡編程
上一篇:CFtpConnection PutFile上傳后的檔案的時間戳變了
下一篇:關于Win32 api函式的問題
