あと1回でジャンルランキングから消すぞとアメブロに脅されています。アセアセ

 

こういうジャンルって、日常の中で「あ、これ記事になりそうだな」とか「これはメモしておこう」とかがあったときに書くもので毎日書くものではないと思うのですが…運営さん

 

ということで、まだ成功していない、途中なのですが記事にしておきます。

 

PCのブラウザでH8マイコンのアドレスを呼び出すとWelcomeメッセージが表示される記事はよく見かけますし、付属のCDでもhttpprogとして提供されていますが、H8マイコンからサーバーを呼び出す記事が無いのです。(私が探した範囲ではあせる

 

そこでH8マイコンで3ウェイハンドシェイクを試してみようという記事です。

 

参考ページ:

TCPプロトコル

http://www.picfun.com/lan19a.html

Windows計算機でTCPチェックサムを計算する方法

http://el.jibun.atmarkit.co.jp/hiro/2013/07/tcp-f933.html

 

まず、ローカルPCのブラウザでH8マイコンのIPアドレスを呼び出しWelcomeメッセージを表示させます。

H8マイコンのIPアドレスは192.168.254.113に変更しています。

 

Wiresharkでキャプチャしてみます。

ip addr == 192.168.1.113でフィルタしています。

 

PC(192.168.254.199)からH8(192.168.254.113)にSYNが送られて通信が開始していることがわかります。

終了処理が出来ていないのか、最後はFIN,ACKを5回繰り返してRST,ACKで終わっています。

 

1行目のSYNを選択すると下に16進が表示されます。

これをTCPフレームと比較しながらmain.cに落とし込むと

上のプログラムでは宛先と発信元を入れ替えてH8からSYNを送信するようにしています。

 

送信する部分はこんな感じ

 

#include <h8/reg3067.h>
#include <h8/syscall.h>

 

#define ETHER_BASE_ADDR  0x200000
#define MY_ADDR    IPADDR(192,168,254,113)
#define MY_MASK    IPADDR(255,255,255,0)
#define MY_GATEWAY   IPADDR(192,168,254,254)

 

 //NICの初期設定
 ether_init(ETHER_BASE_ADDR);
 
 //NICのセットアップ
 ether_setup();
 
 //Etherステータスを取得する
 dummy = get_ether_status();
 if (get_ether_status() == 0){
  printf("NIC invalid.\r\n"); //NIC無効
  return -1;
 } else {
  printf("NIC valid.\r\n"); //NIC有効
 }
 
 //TCP/IPのセットアップ
 ip_setup(MY_ADDR, MY_MASK);
 
 //ゲートウェイのセットアップ
 set_gateway(MY_GATEWAY);
 
 //NICバッファに書き込む
 dummy = ether_write(DM, 0, num);
 printf("Ether_Write=%d\n", dummy);
 
 //ネットワークへパケットを送信する
 dummy = ether_flush(num);
 printf("Ether_Flush=%d\n", dummy);
 

Wiresharkで見たところ。

 

上の例では、発信元と宛先を入れ替えただけなので動作しました。

 

宛先をサーバーに変えます。この場合、TCPヘッダーのチェックサムを計算する必要があります。

 

長くなるので次回へ

 

SYNを送ってみる(2)へ

 

MENUに戻る