{"id":1797,"date":"2012-11-21T11:44:09","date_gmt":"2012-11-21T02:44:09","guid":{"rendered":"https:\/\/gunmagisgeek.com\/wordpress\/?p=1797"},"modified":"2013-12-29T23:17:09","modified_gmt":"2013-12-29T14:17:09","slug":"post-1797","status":"publish","type":"post","link":"https:\/\/gunmagisgeek.com\/blog\/node-js\/1797","title":{"rendered":"node.js\u3067TCP\u30d7\u30ed\u30ad\u30b7\uff06\u30dd\u30fc\u30c8\u30d5\u30a9\u30ef\u30fc\u30c7\u30a3\u30f3\u30b0"},"content":{"rendered":"<p><strong>node.js\u3067TCP\u30d7\u30ed\u30ad\u30b7<\/strong><\/p>\n<pre class=\"lang:js decode:true \" title=\"tcp_proxy.js\" >var util = require('util');\r\nvar net = require(&quot;net&quot;);\r\n\r\nprocess.on(&quot;uncaughtException&quot;, function(e) {\r\n\tconsole.log(e);\r\n});\r\n\r\nif (process.argv.length != 5) {\r\n  console.log(&quot;\u5f15\u6570\u304c\u6b63\u3057\u304f\u5165\u529b\u3055\u308c\u3066\u3044\u307e\u305b\u3093:&quot; +\u3000&quot; proxy_port target_host target_port&quot;);\r\n    console.log(&quot;node scriptfile 3000 www.google.com 80&quot;);\r\n  process.exit();\r\n}\r\n\r\nvar proxyPort = process.argv[2];\r\nvar targetHost = process.argv[3];\r\nvar targetPort = process.argv[4];\r\n\r\nnet.createServer(function (proxySocket) {\r\n  var connected = false;\r\n  var buffers = new Array();\r\n  var targetSocket = new net.Socket();\r\n  targetSocket.connect(parseInt(targetPort), targetHost, function() {\r\n    connected = true;\r\n    if (buffers.length &gt; 0) {\r\n      for (i = 0; i &lt; buffers.length; i++) {\r\n        console.log(buffers[i].toString());\r\n        targetSocket.write(buffers[i]);\r\n      }\r\n    }\r\n  });\r\n\r\n  proxySocket.on(&quot;error&quot;, function (e) {\r\n    targetSocket.end();\r\n  });\r\n  targetSocket.on(&quot;error&quot;, function (e) {\r\n    console.log(&quot;targethost\u306b\u63a5\u7d9a\u3067\u304d\u307e\u305b\u3093 &quot; + targetHost + ', port ' + targetPort);\r\n    proxySocket.end();\r\n  });\r\n\r\n  proxySocket.on(&quot;data&quot;, function (data) {\r\n\tconsole.log(&quot;send: &quot;+data.toString()); \/\/\u9001\u4fe1\u30c7\u30fc\u30bf\r\n    if (connected) {\r\n      targetSocket.write(data);\r\n    } else {\r\n      buffers[buffers.length] = data;\r\n    }\r\n  });\r\n  targetSocket.on(&quot;data&quot;, function(data) {\r\n\tconsole.log(&quot;rec: &quot; + data.toString());  \/\/\u53d7\u4fe1\u30c7\u30fc\u30bf\r\n    proxySocket.write(data);\r\n  });\r\n\r\n  proxySocket.on(&quot;close&quot;, function(had_error) {\r\n    targetSocket.end();\r\n  });\r\n  targetSocket.on(&quot;close&quot;, function(had_error) {\r\n    proxySocket.end();\r\n  });\r\n\r\n}).listen(proxyPort);<\/pre>\n<p>\u4f7f\u3044\u65b9\uff09<\/p>\n<pre class=\"lang:sh decode:true \" >$ node tcp_proxy.js [\u30d7\u30ed\u30ad\u30b7\u30dd\u30fc\u30c8] [\u30bf\u30fc\u30b2\u30c3\u30c8\u30db\u30b9\u30c8] [\u30bf\u30fc\u30b2\u30c3\u30c8\u30dd\u30fc\u30c8]<\/pre>\n<p>\u4f8b\uff09<\/p>\n<pre class=\"lang:sh decode:true \" >$ node tcp_proxy.js 23 example.com 23\r\n<\/pre>\n<p>tcp_proxy.js\u3092\u5b9f\u884c\u3057\u305f\u7aef\u672b\u3067\u3001\u30ed\u30fc\u30ab\u30eb\u30db\u30b9\u30c8\u306btelnet\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u3067\u63a5\u7d9a\u3059\u308b\u3068\u3001\u30d7\u30ed\u30ad\u30b7\u7d4c\u7531\u3067example.com\u306b\u30a2\u30af\u30bb\u30b9\u3057\u307e\u3059\u3002<br \/>\nsmtp\u3068\u304bssh\u3068\u304b\u3044\u308d\u3093\u306a\u30d7\u30ed\u30c8\u30b3\u30eb\u3067\u8a66\u3057\u3066\u307f\u308b\u3068\u9762\u767d\u3044\u304b\u3082\uff1f<\/p>\n<p>&emsp;<\/p>\n<p><strong>http-proxy\u30e2\u30b8\u30e5\u30fc\u30eb\u3092\u4f7f\u3063\u305f\u30dd\u30fc\u30c8\u30d5\u30a9\u30ef\u30fc\u30c7\u30a3\u30f3\u30b0<\/strong><br \/>\n\u30e2\u30b8\u30e5\u30fc\u30eb\u306e\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb<\/p>\n<pre class=\"lang:js decode:true \" >npm install http-proxy<\/pre>\n<pre class=\"lang:js decode:true \" title=\"port_forwarding.js\" >var httpProxy = require('http-proxy');\r\nvar options = {\r\n    hostnameOnly:true,\r\n    router: {\r\n        'example.com': '127.0.0.1:8080',\r\n        'hoge.example.com': '127.0.0.1:9090'\r\n    }\r\n\r\n}\r\nhttpProxy.createServer(options).listen(80);<\/pre>\n<p>\u5b9f\u884c\u3059\u308b\u306880\u756a\u30dd\u30fc\u30c8\u3067listen\u3057\u3066\u3001example.com\u306b\u30a2\u30af\u30bb\u30b9\u3057\u3066\u304d\u305f\u901a\u4fe1\u30928080\u30dd\u30fc\u30c8\u306b\u3001hoge.example.com\u3067\u30a2\u30af\u30bb\u30b9\u3057\u3066\u304d\u305f\u901a\u4fe1\u30929090\u30dd\u30fc\u30c8\u306b\u9001\u4fe1\u3057\u307e\u3059\u3002<\/p>\n","protected":false},"excerpt":{"rendered":"<p>node.js\u3067TCP\u30d7\u30ed\u30ad\u30b7 var util &hellip;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[5],"tags":[],"class_list":["post-1797","post","type-post","status-publish","format-standard","hentry","category-node-js"],"_links":{"self":[{"href":"https:\/\/gunmagisgeek.com\/blog\/wp-json\/wp\/v2\/posts\/1797","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/gunmagisgeek.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/gunmagisgeek.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/gunmagisgeek.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/gunmagisgeek.com\/blog\/wp-json\/wp\/v2\/comments?post=1797"}],"version-history":[{"count":12,"href":"https:\/\/gunmagisgeek.com\/blog\/wp-json\/wp\/v2\/posts\/1797\/revisions"}],"predecessor-version":[{"id":3267,"href":"https:\/\/gunmagisgeek.com\/blog\/wp-json\/wp\/v2\/posts\/1797\/revisions\/3267"}],"wp:attachment":[{"href":"https:\/\/gunmagisgeek.com\/blog\/wp-json\/wp\/v2\/media?parent=1797"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/gunmagisgeek.com\/blog\/wp-json\/wp\/v2\/categories?post=1797"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/gunmagisgeek.com\/blog\/wp-json\/wp\/v2\/tags?post=1797"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}