File: extract-port-numbers.pl

package info (click to toggle)
tcng 10b-4
  • links: PTS, VCS
  • area: main
  • in suites: wheezy
  • size: 3,644 kB
  • sloc: ansic: 19,040; pascal: 4,640; yacc: 2,619; sh: 1,914; perl: 1,546; lex: 772; makefile: 751
file content (51 lines) | stat: -rwxr-xr-x 1,443 bytes parent folder | download | duplicates (5)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
#!/usr/bin/perl
#
# extract-port-numbers.pl - Extract port numbers from IANA port-numbers file
#
# Written 2001 by Werner Almesberger
# Copyright 2001 Network Robots
#

while (<>) {
    chop;
    next if /^\s*#/;
    next unless m#\s+(\d+)(-\d+)?/(udp|tcp)\s+#;
    $name = $`;
    $port = $1;
    $range = $2;
    $proto = $3;
    $dsc = $';
    next if $name eq "";
    next if $dsc =~ /\s*(Unassigned|Reserved)\s*$/;
    $name =~ s/\+\+/_PP/;  # whois++
    if ($name =~ /[^-A-Za-z0-9\.\*\/_]/) {
	print STDERR "ERROR: invalid character \"$&\" in $name ".
	  "($port/$proto)\n";
	next;
    }
    print STDERR "warning: using only port $port of $port$range\n"
      if defined $range;
    $name =~ tr/a-z/A-Z/;
    $name =~ tr#-.*/#_#;
    if (!defined $port{$name}) {
	$port{$name} = $port;
	$proto{$name} = $proto;
	next;
    }
    if ($port{$name} != $port) {
	print STDERR "warning: $name changed port from $port{$name} to $port\n";
	$port{$name} = $port;
	print STDERR "ERROR: protocol $name changed from $proto{$name} to ".
	  "$proto\n"
	    if $proto{$name} ne $proto;
    }
}

print "/* MACHINE-GENERATED - DO NOT EDIT ! */\n\n" || die;
print "/* Extracted from IANA port-numbers database, available from */\n".
  "/* http://www.iana.org/assignments/port-numbers */\n\n" || die;
print "#ifndef PORTS_TC\n\n" || die;
for (sort keys %port) {
    print "#define PORT_$_ $port{$_}\n" || die;
}
print "\n#endif /* PORTS_TC */\n" || die;