IPX용 프로그래밍 방법이 궁금합니다.

pleasantman의 이미지

안녕하세요..
철지난 IPX를 사용해야 하는 부분이 생겼습니다.
IPX-HOW-TO를 봤는데..

ping 같은 것도 없고. 어떻게 통신프로그램을 만들어야 하는지 난감합니다.

sample 프로그램에서 내 컴퓨터 안에서는 동작하는데,

문제는 외부로부터의 패킷이 나가거나 들어오지 않는다는 겁니다.

참고 site나 문서 혹은 프로그램을 알려주세요.. (T.T)

[root@innolinux Samples]# cat /proc/net/ipx/interface
Network    Node_Address   Primary  Device     Frame_Type
ABCD1234   00022AC1C6BF   Yes      eth0       802.2

[root@innolinux Samples]# cat /proc/net/ipx/route
Network    Router_Net   Router_Node
ABCD1234   Directly     Connected


[root@innolinux Samples]# /sbin/ifconfig
eth0      Link encap:Ethernet  HWaddr 00:02:2A:C1:C6:BF
          inet addr:10.253.18.214  Bcast:10.253.255.255  Mask:255.255.0.0
          inet6 addr: fe80::202:2aff:fec1:c6bf/64 Scope:Link
          IPX/Ethernet 802.2 addr:ABCD1234:00022AC1C6BF
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:19549 errors:0 dropped:0 overruns:0 frame:0
          TX packets:2186 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:5120606 (4.8 Mb)  TX bytes:180835 (176.5 Kb)
          Interrupt:18 Base address:0xcc00

아래는 RCV 소스입니다.

==================

#include <stdio.h>
#include <sys/types.h>
#include <linux/ipx.h>
#include <netinet/in.h>
#include <sys/socket.h>
#include <errno.h>

int
main(int argc, char **argv)
{
        struct sockaddr_ipx     sipx;
        int     s;
        int     result;
        char    msg[100];
        int     len;

        s = socket(AF_IPX, SOCK_DGRAM, AF_IPX);
        if (s < 0) {
                perror("IPX: socket: ");
                exit(-1);
        }
        sipx.sipx_family = AF_IPX;
        sipx.sipx_network = 0;
        sipx.sipx_port = htons(0x5000);
//      sipx.sipx_port = 0x00FF;
        sipx.sipx_type = 4;
        len = sizeof(sipx);
        result = bind(s, (struct sockaddr *)&sipx, sizeof(sipx));
        if (result < 0) {
                perror("IPX: bind: ");
                exit(-1);
        }

        while(1)
        {

        msg[0] = '\0';
        result = recvfrom(s, msg, sizeof(msg),  0, (struct sockaddr *)&sipx,
                        &len);
        if (result < 0) {
                perror("IPX: recvfrom: ");
        }

        printf("From %08lX:%02X%02X%02X%02X%02X%02X:%04d\n",
                htonl(sipx.sipx_network),
                sipx.sipx_node[0], sipx.sipx_node[1],
                sipx.sipx_node[2], sipx.sipx_node[3],
                sipx.sipx_node[4], sipx.sipx_node[5],
                //htons(sipx.sipx_port));
                sipx.sipx_port);
        printf("\tGot \"%s\"\n", msg);
        }
        return 0;
}

===============================
jysys의 이미지

tcp 나 dup 통신할때 gate 주솔 사용합니다
이 넷떳에서 밖으로 빠저나가는 위치 말이저!

ipx 에서도 이와 같이 외부로 빠저 나갈 장칠 설정 해야 합니다

예를 들어
내가 사용하는 주소가 ABCD1234:00022AC1C6BF 라면
통신할 주소가

ABCD8200 0002A54DAAAAA
ABCD8200 0002A54DBBBBB
ABCD8100 0002A54D1111A
ABCD8100 0002A54D2222B

라면

먼저
cat /proc/net/ipx_route

Network Router_Net Router_Node
ABCD1234 Directly Connected
이케 나오는지 확인 하시고

그러면 이네떡(ABCD1234) 에서 다른 네떡으로 갈 장치의 주소를 찾아 봐야 합니다
그 라우트할 네떡 주소가
ABCD1234:0002A54DCE05C 라면

도착할 네떡이
ABCD8200 와
ABCD8100 인고로

ipx_route add ABCD8200 ABCD1234 0002A54DCE05C
ipx_route add ABCD8100 ABCD1234 0002A54DCE05C

------------- 도착넷떡 -내 내떡 -라우터 주소--
로 설정 하시면

ABCD1234 0002A54DCE05C
를 통하여
ABCD8200 0002A54DAAAAA
ABCD8200 0002A54DBBBBB

ABCD8100 0002A54D1111A
ABCD8100 0002A54D2222B
로 통신 할 수 있습니다

yhkim47의 이미지

안녕하세요.

저는 지금 linux에 IPX를 설정해서 프로그램을 만들려고 하는 개발자입니다.

TCP로 받은 데이터를 IPX를 이용해서 다른 서버로 송신하는 프로그램을 만들어야 하는데,
IPX로 프로그램을 해본 경험이 없어 이렇게 글 드립니다.

먼저, linux에 IPX를 설치하는 부분부터 어렵네요.
google에서 검색을 해보니 10년전쯤 문서들이 나오네요.
그나마 문서에서는 /proc/net/ipx가 있어야 한다는데 제 리눅스 서버에는 없네요.

linux에 IPX를 어떻게 설정하는지 알려주실 수 있는지요?

감사합니다.

익명 사용자의 이미지

구글에서 "linux ipx" 로 검색하니 바로 나오는군요.
아래와 같이 바로 IPX 가 올라오네요.
참고한 문서는 이겁니다.

http://linuxdoc.org/HOWTO/IPX-HOWTO-7.html#ss7.1

root@monovision:~# ipx_interface add -p eth0 802.2 0x39ab0222
root@monovision:~# ifconfig
eth0 Link encap:Ethernet HWaddr 00:18:8b:2f:94:8d
inet addr:xxx.xxx.xxx.xxx Bcast:xxx.xxx.xxx.xxx Mask:255.255.255.252
IPX/Ethernet 802.2 addr:39AB0222:00188B2F948D
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:501328047 errors:0 dropped:0 overruns:0 frame:0
TX packets:415259367 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:368289131017 (368.2 GB) TX bytes:79111877157 (79.1 GB)
Interrupt:16 Memory:f8000000-f8012700

익명 사용자의 이미지

감사합니다. 많은 도움이 되었습니다.

그런데 이상한 현상이 하나 생겼는데요.
sender와 recver 두개의 테스트 프로그램을 작성해서 테스트 하고 있는데,
하나의 장비 내에서 sender와 recver를 실행하면 데이터 송수신이 원활하게 진행됩니다.
그런데 sender와 recver를 각각 다른 장비에 올려서 실행하면 데이터 송수신이 안됩니다.
하지만 tcpdump로 확인하면 recver가 실행되는 장비에 데이터가 수신되는 것을 확인할 수 있습니다.
왜 nic으로 수신되는 데이터가 recver 프로그램으로 올라오지 않는 걸까요?
어떤 설정이 더 필요할까요? 아니면 뭔가를 잘못했을까요?

아래는 설정내용입니다.
[root@pigeon1 nwbin]# cat /proc/net/ipx/interface
Network Node_Address Primary Device Frame_Type
39AB0222 00105AC40129 No eth1 802.3
[root@pigeon1 nwbin]# cat /proc/net/ipx/route
Network Router_Net Router_Node
39AB0223 39AB0222 00105AC40129
39AB0222 Directly Connected

[root@pigeon2 ipxsend]# cat /proc/net/ipx/interface
Network Node_Address Primary Device Frame_Type
39AB0223 00105AC04264 Yes eth0 802.3
[root@pigeon2 ipxsend]# cat /proc/net/ipx/route
Network Router_Net Router_Node
39AB0222 39AB0223 00105AC04264
39AB0223 Directly Connected

익명 사용자의 이미지

이런 멍청한 설정을 제가 해놨군요.

두개의 장비를 다이렉트로 연결할때는 network를 동일하게 설정해야 하네요.
그리고 ipx routing을 잡을 필요도 없구요.
네크워크 개념부족이 원인이네요..

아래와 같이 설정하니 두 장비 사이에 데이터 송수신이 잘 되는군요.

[root@pigeon1 nwbin]# cat /proc/net/ipx/interface
Network Node_Address Primary Device Frame_Type
39AB0222 00105AC40129 No eth1 802.3
[root@pigeon1 nwbin]# cat /proc/net/ipx/route
Network Router_Net Router_Node
39AB0222 Directly Connected

[root@pigeon2 ipxsend]# cat /proc/net/ipx/interface
Network Node_Address Primary Device Frame_Type
39AB0222 00105AC04264 Yes eth0 802.3
[root@pigeon2 ipxsend]# cat /proc/net/ipx/route
Network Router_Net Router_Node
39AB0222 Directly Connected

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.