[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[debian-users:20698] Re: Q: DNS



越水です。

From: Tomoyuki Kosimizu <greentea@xxxxxxxxxxxxxxxx>
Subject: [debian-users:20696] Re: Q: DNS
Date: Thu, 10 Feb 2000 08:05:37 +0900

> ヤマ勘なのですが、w3mには問題がないように思うのです。下のようなRubyの
> スクリプト(Daytimeプロトコル=クライアント)でもモデムが反応します。

JavaとCでも調べてみたのですが、両者では外にパケットは洩れませんでした。
う〜む。

JavaとC++のコードを書いておきます:

// Java
import java.io.*;
import java.net.*;

class DaytimeC {
  public static void main(String[] args) throws Exception {
    String server = "localhost";
    int port = 13;

    if (args.length == 2) {
      server = args[0];
      port = Integer.parseInt(args[1]);
    }

    Socket soc = new Socket(server, port);
    BufferedReader reader =
        new BufferedReader(new InputStreamReader(soc.getInputStream()));

    System.out.println(reader.readLine());
  }
}

// C++
extern "C" {
#include <arpa/inet.h>
#include <netdb.h>
#include <netinet/in.h>
#include <sys/socket.h>
#include <unistd.h>
}

#include <cerrno>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <stdexcept>
using namespace std;

const int MAXLINE = 1024;

int main(int argc, char* argv[])
{
  try {
    if (argc < 2) {
      throw runtime_error("no server address");
    }

    int sockfd = socket(AF_INET, SOCK_STREAM, 0);
    if (sockfd < 0) {
      throw runtime_error("socket() failed");
    }

    hostent* hp = gethostbyname(argv[1]);
    if (! hp) {
      throw runtime_error("gethostbyname() failed");
    }

    sockaddr_in addr;
    memset(&addr, 0, sizeof(addr));
    addr.sin_family = AF_INET;
    memcpy(&addr.sin_addr, *hp->h_addr_list, sizeof(in_addr));
    addr.sin_port = htons(13);

    if (connect(sockfd, reinterpret_cast<sockaddr*>(&addr), 
        sizeof(addr)) < 0) {
      throw runtime_error("connect() failed");
    }

    char buff[MAXLINE + 1];
    int n;
    while ((n = read(sockfd, buff, MAXLINE)) > 0) {
      buff[n] = '\0';
      if (fputs(buff, stdout) == EOF) {
        throw runtime_error("fputs() failed");
      }
    }
    if (n < 0) {
      throw runtime_error("read() failed");
    }
  } catch (runtime_error& e) {
    fprintf(stderr, "%s\n", e.what());
  }
  return 0;
}

// 越水
// greentea@xxxxxxxxxxxxxxxx