⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 iis2apache.pl

📁 web服务器访问统计
💻 PL
字号:
#!/usr/bin/perl## Use this tool to convert IIS logs into NCSA format that# Visitors will be able to handle.## make an IIS log look strikingly like an apache log# we make a vague attempt to interpret the Fields: header# in an IIS logfile and use that to make IIS fields match up# with apache fields.## Copyright jwa@jammed.com 12 Dec 2000## This software is released under the GPL license# as specified in the home page: http://www.jammed.com/~jwa/hacks/while ($arg = shift @ARGV) {	$tzoffset = shift @ARGV if ($arg eq "--faketz");	$vhost = shift @ARGV if ($arg eq "--vhost");	$debug = 1 if ($arg eq "--debug");	# show field interpretation}	if ($tzoffset eq "") {	print STDERR "Will use -0000 as a fake tzoffset\n";	$tzoffset = "-0000";}# build month hash@m = ('Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec');while ($m = shift @m) {	$month{++$n} = $m;}# an IIS log adheres to what's defined by 'Fields;'# attempt to parse this, tagging LINE:while ($line = <STDIN>) {	$line =~ s/\r|\n//g;	# cooky DOS format	if ($line =~ /^#Fields: /) {		@line = split(" ", $line);		shift @line; # shifts of #Fields		# build a hash so we can look up a fieldname and 		# have it return a position in the string		undef %fieldh;		$n = 0;	# zero-based array for split		while ($l = shift @line) {			$fieldh{$l} = $n++;			print STDERR "$l is position $fieldh{$l}\n" if ($debug);		}	}	next LINE if ($line =~ /^#/);#Fields: date time c-ip cs-username s-sitename s-computername s-ip cs-method cs-#uri-stem cs-uri-query sc-status sc-win32-status sc-bytes cs-bytes time-taken #s-port cs-version cs(User-Agent) cs(Cookie) cs(Referer)	# this is really slow.  	$date = yankfield("date");	$time = yankfield("time");	$ip = yankfield("c-ip");	$username = yankfield("cs-username");	$method = yankfield("cs-method");	$stem = yankfield("cs-uri-stem");	$query = yankfield("cs-uri-query");	$status = yankfield("sc-status");	#$bytes = yankfield("cs-bytes");	# Which is it? sc-bytes or cs-bytes?  	# cs-bytes only appears in some of the IIS logs I've seen.	# I'll assume that sc-bytes is "server->client bytes", which 	# is what we want anyway.	$bytes = yankfield("sc-bytes");		# I'm gonna go with this.	$useragent = yankfield("cs(User-Agent)");	$referer = yankfield("cs(Referer)");	$useragent =~ s/\+/\ /g;	# our modified CLF sez:	# IP - - [DD/MMM/YYYY:HH:MM:SS TZOFFSET] "method stem[?query]" status bytes "referer" "user agent" "vhost"	# convert date 	# 2000-07-19 00:00:01	($y, $m, $d) = split("-", $date);	$m =~ s/^0//g;	$mname = $month{$m};	# build url	$url = $stem;	if ($query ne "-") {		$url .= "?$query";	}	# all done, print it out	print "$ip - - [${d}/${mname}/${y}:${time} ${tzoffset}] \"$method $url\" $status $bytes \"$referer\" \"$useragent\" \"${vhost}\"\n";}# return the proper field, or "-" if it's not defined.# (unfortunately ($date) = (split(" ", $line))[$fieldh{date}]; # will return element 0 if $fieldh{date} is undefined . . .)sub yankfield {	my ($field) = shift @_;	print STDERR "Looking at $field; position [$fieldh{$field}]\n" if ($debug);	if ($fieldh{$field} ne "") {		return (split(" ", $line))[$fieldh{$field}];	} else {		print STDERR "$field undefined\n" if ($debug);		return "-";	}}	

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -