tracerouteでAS PATHを表示する(FreeBSD 7.2)

前の日記に書いた通り、4byte ASの完全対応と、不明なAS PATH(あるのか?)に対応すべく、標準のtracerouteの差分も作った。/usr/src/contribでパッチを当てて、/usr/src/usr.sbin/traceroute でmake & make installすればよし。同じく無保証。

diff -aurN traceroute.original/as.c traceroute/as.c
--- traceroute.original/as.c 2008-11-14 00:27:48.000000000 +0900
+++ traceroute/as.c 2009-04-19 15:27:21.000000000 +0900
@@ -137,14 +137,15 @@
return (asn);
}

-int
+unsigned int
as_lookup(_asn, addr)
void *_asn;
struct in_addr *addr;
{
struct aslookup *asn = _asn;
char buf[1024];
- int as, rc, dlen;
+ unsigned int as;
+ int rc, dlen;

as = rc = dlen = 0;
(void)fprintf(asn->as_f, "!r%s/32,l\n", inet_ntoa(*addr));
@@ -209,7 +210,7 @@

/* origin line is the interesting bit */
if (as == 0 && strncasecmp(buf, "origin:", 7) == 0) {
- sscanf(buf + 7, " AS%d", &as);
+ sscanf(buf + 7, " AS%u", &as);
#ifdef AS_DEBUG_FILE
if (asn->as_debug) {
(void)fprintf(asn->as_debug, "as: %d\n", as);
diff -aurN traceroute.original/as.h traceroute/as.h
--- traceroute.original/as.h 2008-11-14 00:27:48.000000000 +0900
+++ traceroute/as.h 2009-04-19 15:27:38.000000000 +0900
@@ -38,5 +38,5 @@
*/

void *as_setup __P((char *));
-int as_lookup __P((void *, struct in_addr *));
+unsigned int as_lookup __P((void *, struct in_addr *));
void as_shutdown __P((void *));
diff -aurN traceroute.original/traceroute.c traceroute/traceroute.c
--- traceroute.original/traceroute.c 2008-11-14 00:27:48.000000000 +0900
+++ traceroute/traceroute.c 2009-04-19 15:31:24.000000000 +0900
@@ -1477,13 +1477,20 @@
{
register struct ip *ip;
register int hlen;
+ unsigned int as_num;

ip = (struct ip *) buf;
hlen = ip->ip_hl << 2;
cc -= hlen;

- if (as_path)
- Printf(" [AS%d]", as_lookup(asn, &from->sin_addr));
+ if (as_path) {
+ as_num = as_lookup(asn, &from->sin_addr);
+ if(as_num != 0) {
+ Printf(" [AS%u]", as_num);
+ } else {
+ Printf(" [?]");
+ }
+ }

if (nflag)
Printf(" %s", inet_ntoa(from->sin_addr));

ブログ気持玉

クリックして気持ちを伝えよう!

ログインしてクリックすれば、自分のブログへのリンクが付きます。

→ログインへ

なるほど(納得、参考になった、ヘー)
驚いた
面白い
ナイス
ガッツ(がんばれ!)
かわいい

気持玉数 : 0

この記事へのコメント