A. linux環境下,c語言怎麼讀取WEB伺服器的80埠上頁面的內容
已知url ,host, port;
int s, size;
struct sockaddr_in sin;
struct hostent* phe;
char cmd[256];
char msg_hdr[1000];
char* p;
//准備http中GET 方法的請求。
sprintf(cmd,"GET %s\r\nHTTP/1.1\r\nHost:%s", url, host);
//創建socket
if((s=socket(PF_INET,SOCK_STREAM,0))<0)
return -1;
//取得遠程主機的IP地址,失敗函數返回-1
if((phe = gethostbyname(host)) == NULL)
return -1;
memset(&sin,0,sizeof(sin));
memcpy(&sin.sin_addr,phe->h_addr,sizeof(struct in_addr));
sin.sin_family=AF_INET;
sin.sin_port=htons(pms->port);
//跟遠程機器建立連接,失敗函數返回-1
if(connect(s,(struct sockaddr*)&sin,sizeof(sin))==-1)
return -1;
//發送GET請求
if(write(s,cmd,strlen(cmd))<0)
return 0;
//從鏈接描述符(連接管道)中讀取傳送過來的數據
if(read(s, msg_hdr, 300)<0)
error;
close(s);
//讀到該文件的大小
if((p=strstr(msg_hdr,"Content-Length"))||(p=strstr(msg_hdr,"Content-length:")))
p+=16;
else
error;
//返回大小
size = atoi(p);
sprintf(cmd,"GET %s HTTP/1.1\r\nHost: %s\r\nAccept: */*\r\nPragma: no-cache\r\nCache-Control: no-cache\r\nConnection: close\r\nRange: bytes0-%d\r\n\r\n", url, host, size);
//創建套介面
if((s=socket(AF_INET,SOCK_STREAM,0))<0)
return 0;
//取得遠程主機的IP地址,失敗返回0
if((phe = gethostbyname(host)) == NULL)
return 0;
memset(&sin,0,sizeof(sin));
memcpy(&sin.sin_addr,phe->h_addr,sizeof(struct in_addr));
sin.sin_family=AF_INET;
sin.sin_port=htons(port);
//建立連接
if(connect(s,(struct sockaddr*)&sin,sizeof(sin))==-1)
return 0;
//發送讀取請求
if(write(s,cmd,strlen(cmd))<0)
error;
read(s, buf, BUFSIZE)..............
B. 如何用c語言在windows環境下實現簡單的web伺服器
用C語言開發WEB,可以用C++BUILDER6,稱ISAPI,一般人可能做不起來,有點麻煩;
唯一是速度很快,別人看不到源碼,掌握了編程套路,也可以開發應用;
缺點:
1。不是解釋性語言,做的WEB調試非常麻煩;現在做WEB開發的,用C#、JAVA較多;都是解釋性的語言;
2。因為是.DLL的二進制代碼,一般商業網站不給予運行的環境,因為網站伺服器會被你可能搞癱,安全性得不到保障;所以,你得自備網頁伺服器;
3。得不到技術支持,因為沒幾個人會這種開發;
C. 有沒有用C或c++寫的web伺服器
C++單獨作為應用服務的伺服器較少,http伺服器有一些的。比如IIS、apache、nginx,d都是基於C/C++的web伺服器,國產的有數蠶web伺服器,完全使用C++,基於Linux epoll模型。
如果C++服務端要求簡單,可以直接基於socket編寫。如果通信場景復雜,建議使用成熟的C++網路庫,如POCO、cpp-net、boost-asio、數蠶網路通信庫。
D. web伺服器和應用伺服器的區別
一、指代不同
1、web伺服器:叫網頁伺服器或web伺服器。WEB伺服器也稱為WWW(WORLD WIDE WEB)伺服器,主要功能是提供網上信息瀏覽服務。
2、應用伺服器:指通過各種協議把商業邏輯曝露給客戶端的程序。
二、功能不同
1、web伺服器:可以解析(handles)HTTP協議。當Web伺服器接收到一個HTTP請求(request),會返回一個HTTP響應(response),例如送回一個HTML頁面。
2、應用伺服器:提供了訪問商業邏輯的途徑以供客戶端應用程序使用。應用伺服器使用此商業邏輯就像調用對象的一個方法一樣。
三、特點不同
1、web伺服器:傳送(serves)頁面使瀏覽器可以瀏覽。
2、應用伺服器:應用程序伺服器是通過很多協議來為應用程序提供(serves)商業邏輯(business logic)。
E. 常用的web伺服器軟體有哪些
1.IIS
IIS是英文Internet Information Server的縮寫,譯成中文就是"Internet信息服務"的意思。它是微軟公司主推的伺服器,最新的版本是Windows2008裡麵包含的IIS 7,IIS與Window Server完全集成在一起,因而用戶能夠利用Windows Server和NTFS(NT File System,NT的文件系統)內置的安全特性,建立強大,靈活而安全的Internet和Intranet站點。
2.ApacheApache
ApacheApache在世界上的排名是第一的,它可以運行在幾乎所有廣泛使用的計算機平台上。Apache源於NCSAhttpd伺服器,經過多次修改,不僅簡單、速度快、而且性能穩定,還可以用來做代理伺服器。
3.Nginx
Nginx不僅是一個小巧且高效的HTTP伺服器,也可以做一個高效的負載均衡反向代理,通過它接受用戶的請求並分發到多個Mongrel進程可以極大提高Rails應用的並發能力。
4.Zeus
Zeus是一個運行於Unix下的非常優秀的Web Server,據說性能超過Apache,是效率最高的Web Server之一。
5.Sun
Sun的Java系統Web伺服器也就是以前的Sun ONE Web Server。主要出現在那些運行Sun的Solaris操作系統的關鍵任務級Web伺服器上。它最新的版本號是6.1,可以支持x86版本Solaris,Red Hat Linux,HP-UX 11i, IBM AIX,甚至可以支持Windows,但它的大多數用戶都選擇了SPARC版本的Solaris操作系統。
F. 文件伺服器,web伺服器,資料庫伺服器,應用程序伺服器,是怎麼樣的,能否簡單介紹一下
文件伺服器一般都是存文件的
web伺服器一般是放系統的,例如ERP系統,wms系統,也可以放企業門戶網站
資料庫伺服器就是資料庫伺服器了,目前市面上國內使用較多的三大資料庫分別是sqlserver,Oracle,MySQL
應用伺服器就是給應用程序做一個服務端,例如web伺服器也屬於應用伺服器的一種,因為應用除了web應用還有c/s架構的應用。
G. web伺服器安全設置
Web伺服器攻擊常利用Web伺服器軟體和配置中的漏洞,web伺服器安全也是我們現在很多人關注的一點,那麼你知道web伺服器安全設置嗎?下面是我整理的一些關於web伺服器安全設置的相關資料,供你參考。
web伺服器安全設置一、IIS的相關設置
刪除默認建立的站點的虛擬目錄,停止默認web站點,刪除對應的文件目錄c:inetpub,配置所有站點的公共設置,設置好相關的連接數限制, 帶寬設置以及性能設置等其他設置。配置應用程序映射,刪除所有不必要的應用程序擴展,只保留asp,php,cgi,pl,aspx應用程序擴展。對於php和cgi,推薦使用isapi方式解析,用exe解析對安全和性能有所影響。用戶程序調試設置發送文本錯誤信息給客戶。
對於資料庫,盡量採用mdb後綴,不需要更改為asp,可在IIS中設置一個mdb的擴展映射,將這個映射使用一個無關的dll文件如C:WINNTsystem32inetsrvssinc.dll來防止資料庫被下載。設置IIS的日誌保存目錄,調整日誌記錄信息。設置為發送文本錯誤信息。修改403錯誤頁面,將其轉向到其他頁,可防止一些掃描器的探測。另外為隱藏系統信息,防止telnet到80埠所泄露的系統版本信息可修改IIS的banner信息,可以使用winhex手工修改或者使用相關軟體如banneredit修改。
對於用戶站點所在的目錄,在此說明一下,用戶的FTP根目錄下對應三個文件佳,wwwroot,database,logfiles,分別存放站點文件,資料庫備份和該站點的日誌。如果一旦發生入侵事件可對該用戶站點所在目錄設置具體的許可權,圖片所在的目錄只給予列目錄的許可權,程序所在目錄如果不需要生成文件(如生成html的程序)不給予寫入許可權。因為是虛擬主機平常對腳本安全沒辦法做到細致入微的地步。
方法
用戶從腳本提升許可權:
web伺服器安全設置二、ASP的安全設置
設置過許可權和服務之後,防範asp木馬還需要做以下工作,在cmd窗口運行以下命令:
regsvr32/u C:WINNTSystem32wshom.ocx
del C:WINNTSystem32wshom.ocx
regsvr32/u C:WINNTsystem32shell32.dll
del C:WINNTsystem32shell32.dll
即可將WScript.Shell, Shell.application, WScript.Network組件卸載,可有效防止asp木馬通過wscript或shell.application執行命令以及使用木馬查看一些系統敏感信息。另法:可取消以上文件的users用戶的許可權,重新啟動IIS即可生效。但不推薦該方法。
另外,對於FSO由於用戶程序需要使用,伺服器上可以不注銷掉該組件,這里只提一下FSO的防範,但並不需要在自動開通空間的虛擬商伺服器上使用,只適合於手工開通的站點。可以針對需要FSO和不需要FSO的站點設置兩個組,對於需要FSO的用戶組給予c:winntsystem32scrrun.dll文件的執行許可權,不需要的不給許可權。重新啟動伺服器即可生效。
對於這樣的設置結合上面的許可權設置,你會發現海陽木馬已經在這里失去了作用!
web伺服器安全設置三、PHP的安全設置
默認安裝的php需要有以下幾個注意的問題:
C:winntphp.ini只給予users讀許可權即可。在php.ini里需要做如下設置:
Safe_mode=on
register_globals = Off
allow_url_fopen = Off
display_errors = Off
magic_quotes_gpc = On [默認是on,但需檢查一遍]
open_basedir =web目錄
disable_functions =passthru,exec,shell_exec,system,phpinfo,get_cfg_var,popen,chmod
默認設置com.allow_dcom = true修改為false[修改前要取消掉前面的;]
web伺服器安全設置四、MySQL安全設置
如果伺服器上啟用MySQL資料庫,MySQL資料庫需要注意的安全設置為:
刪除mysql中的所有默認用戶,只保留本地root帳戶,為root用戶加上一個復雜的密碼。賦予普通用戶updatedeletealertcreatedrop許可權的時候,並限定到特定的資料庫,尤其要避免普通客戶擁有對mysql資料庫操作的許可權。檢查mysql.user表,取消不必要用戶的shutdown_priv,reload_priv,process_priv和File_priv許可權,這些許可權可能泄漏更多的伺服器信息包括非mysql的 其它 信息出去。可以為mysql設置一個啟動用戶,該用戶只對mysql目錄有許可權。設置安裝目錄的data資料庫的許可權(此目錄存放了mysql資料庫的數據信息)。對於mysql安裝目錄給users加上讀取、列目錄和執行許可權。
Serv-u安全問題:
安裝程序盡量採用最新版本,避免採用默認安裝目錄,設置好serv-u目錄所在的許可權,設置一個復雜的管理員密碼。修改serv-u的banner信息,設置被動模式埠范圍(4001—4003)在本地伺服器中設置中做好相關安全設置:包括檢查匿名密碼,禁用反超時調度,攔截“FTP bounce”攻擊和FXP,對於在30秒內連接超過3次的用戶攔截10分鍾。域中的設置為:要求復雜密碼,目錄只使用小寫字母,高級中設置取消允許使用MDTM命令更改文件的日期。
更改serv-u的啟動用戶:在系統中新建一個用戶,設置一個復雜點的密碼,不屬於任何組。將servu的安裝目錄給予該用戶完全控制許可權。建立一個FTP根目錄,需要給予這個用戶該目錄完全控制許可權,因為所有的ftp用戶上傳,刪除,更改文件都是繼承了該用戶的許可權,否則無法操 作文 件。另外需要給該目錄以上的上級目錄給該用戶的讀取許可權,否則會在連接的時候出現530 Not logged in, home directory does not exist。比如在測試的時候ftp根目錄為d:soft,必須給d盤該用戶的讀取許可權,為了安全取消d盤其他文件夾的繼承許可權。而一般的使用默認的system啟動就沒有這些問題,因為system一般都擁有這些許可權的。
web伺服器安全設置五、資料庫伺服器的安全設置
對於專用的MSSQL資料庫伺服器,按照上文所講的設置TCP/IP篩選和IP策略,對外只開放1433和5631埠。對於MSSQL首先需要為sa設置一個強壯的密碼,使用混合身份驗證,加強資料庫日誌的記錄,審核資料庫登陸事件的”成功和失敗”.刪除一些不需要的和危險的OLE自動存儲過程(會造成 企業管理 器中部分功能不能使用),這些過程包括如下:
Sp_OAcreate Sp_OADestroy Sp_OAGetErrorInfo Sp_OAGetProperty
Sp_OAMethod Sp_OASetProperty Sp_OAStop
去掉不需要的注冊表訪問過程,包括有:
Xp_regaddmultistring Xp_regdeletekey Xp_regdeletevalue
Xp_regenumvalues Xp_regread Xp_regremovemultistring
Xp_regwrite
去掉其他系統存儲過程,如果認為還有威脅,當然要小心drop這些過程,可以在測試機器上測試,保證正常的系統能完成工作,這些過程包括:
xp_cmdshell xp_dirtree xp_dropwebtask sp_addsrvrolemember
xp_makewebtask xp_runwebtask xp_subdirs sp_addlogin
sp_addextendedproc
在實例屬性中選擇TCP/IP協議的屬性。選擇隱藏 SQL Server 實例可防止對1434埠的探測,可修改默認使用的1433埠。除去資料庫的guest賬戶把未經認可的使用者據之在外。 例外情況是master和 tempdb 資料庫,因為對他們guest帳戶是必需的。另外注意設置好各個資料庫用戶的許可權,對於這些用戶只給予所在資料庫的一些許可權。在程序中不要用sa用戶去連接任何資料庫。網路上有建議大家使用協議加密的,千萬不要這么做,否則你只能重裝MSSQL了。
H. c語言寫的web伺服器,用什麼函數可以切斷特定的ip地址的連接
int close(int fd);
close(client_socket);close(server_socket);
I. 如何用c語言實現基於http的webservice
package com.yun.test;
import java.rmi.RemoteException;
import org.apache.axis.client.Call;
import org.apache.axis.client.Service;
import org.apache.axis.message.PrefixedQName;
import org.apache.axis.message.SOAPHeaderElement;
import com.cezanne.golden.user.Exception;
import com.cezanne.golden.user.UserManagerServiceProxy;
import javax.xml.namespace.QName;
import java.net.MalformedURLException;
import javax.xml.rpc.ServiceException;
import javax.xml.soap.Name;
import javax.xml.soap.SOAPException;
public class testWebService {
public static String getResult() throws ServiceException, MalformedURLException, RemoteException, SOAPException
{
//標識Web Service的具體路徑
String endpoint = "WebService服務地址";
// 創建 Service實例
Service service = new Service();
// 通過Service實例創建Call的實例
Call call = (Call) service.createCall();
//將Web Service的服務路徑加入到call實例之中.
call.setTargetEndpointAddress( new java.net.URL(endpoint) );//為Call設置服務的位置
// 由於需要認證,故需要設置調用的SOAP頭信息。
Name headerName = new PrefixedQName( new QName("發布的wsdl里的targetNamespace里的url", "string_itemName") );
org.apache.axis.message.SOAPHeaderElement header = new SOAPHeaderElement(headerName);
header.addTextNode( "blablabla" );
call.addHeader(header);
// SOAPHeaderElement soapHeaderElement = new SOAPHeaderElement("發布的wsdl里的targetNamespace里的url", "SoapHeader");
// soapHeaderElement.setNamespaceURI("發布的wsdl里的targetNamespace里的url");
// try
// {
// soapHeaderElement.addChildElement("string_itemName").setValue("blablabla");
// }
// catch (SOAPException e)
// {
// e.printStackTrace();
// }
// call.addHeader(soapHeaderElement);
//調用Web Service的方法
org.apache.axis.description.OperationDesc oper;
org.apache.axis.description.ParameterDesc param;
oper = new org.apache.axis.description.OperationDesc();
oper.setName("opName");
param = new org.apache.axis.description.ParameterDesc(new javax.xml.namespace.QName("", "arg0"), org.apache.axis.description.ParameterDesc.IN, new javax.xml.namespace.QName(", "string"), java.lang.String.class, false, false);
param.setOmittable(true);
oper.addParameter(param);
param = new org.apache.axis.description.ParameterDesc(new javax.xml.namespace.QName("", "arg1"), org.apache.axis.description.ParameterDesc.IN, new javax.xml.namespace.QName(", "string"), java.lang.String.class, false, false);
param.setOmittable(true);
oper.addParameter(param);
param = new org.apache.axis.description.ParameterDesc(new javax.xml.namespace.QName("", "arg2"), org.apache.axis.description.ParameterDesc.IN, new javax.xml.namespace.QName(", "string"), java.lang.String.class, false, false);
param.setOmittable(true);
oper.addParameter(param);
oper.setReturnType(new javax.xml.namespace.QName(", "string"));
oper.setReturnClass(java.lang.String.class);
oper.setReturnQName(new javax.xml.namespace.QName("", "return"));
oper.setStyle(org.apache.axis.constants.Style.WRAPPED);
oper.setUse(org.apache.axis.constants.Use.LITERAL);
oper.addFault(new org.apache.axis.description.FaultDesc(
new javax.xml.namespace.QName("發布的wsdl里的targetNamespace里的url", "Exception"),
"Exception",
new javax.xml.namespace.QName("發布的wsdl里的targetNamespace里的url", "Exception"),
true
));
call.setOperation( oper );
call.setOperationName(new javax.xml.namespace.QName("發布的wsdl里的targetNamespace里的url", "opName"));
//調用Web Service,傳入參數
String res = ( String ) call.invoke( new Object[]("arg0","arg1"));
System.out.println("===============");
return res;
}
/**
* @param args
*/
public static void main(String[] args) {
try {
System.out.println(getResult());
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (RemoteException e) {
e.printStackTrace();
} catch (ServiceException e) {
e.printStackTrace();
} catch (SOAPException e) {
e.printStackTrace();
}
}
}