472,779 Members | 2,498 Online
Bytes | Software Development & Data Engineering Community
Post Job

Home Posts Topics Members FAQ

Join Bytes to post your question to a community of 472,779 software developers and data experts.

TCP connection to MAC address

Hello,

I would like to convert to following process to code. Any advice is
welcome.

I have a hardware device which requires the this procedure to set it's
IP address. First create an static ARP entry for the device's MAC
address and the desired IP address. Then telnet to this IP address on
TCP port 1. This will set the device to temporarily respond to that IP
address. Now you can use HTTP to access the device's web interface and
explicitly set it's IP address.

Basically it looks like creating a TCP connection on port 1, based on
MAC address instead of IP address, then a normal TCP connection on port
80 to do an HTTP POST and set the IP address. The first step may be a
little more involved, since the IP address will have to be included
somewhere.

Please excuse any stupid/misinformed questions - I'm completely new to
C#, and .net for that matter (coming from a VB6 background). I'm
currently using the 2005 Express edition, if that makes any difference.

Regards,
Nicolas

*** Sent via Developersdex http://www.developersdex.com ***
Aug 31 '07 #1
6 6822
Nicolas Noakes wrote:
Hello,

I would like to convert to following process to code. Any advice is
welcome.

I have a hardware device which requires the this procedure to set it's
IP address. First create an static ARP entry for the device's MAC
address and the desired IP address. Then telnet to this IP address on
TCP port 1. This will set the device to temporarily respond to that IP
address. Now you can use HTTP to access the device's web interface and
explicitly set it's IP address.
Could you flesh out this process a bit more? I'm confused as to what
you're trying to do. It seems like you want to have some kind of remote
configuration of the host's IP address abilities. What I don't
understand is why creating a static ARP entry is even necessary?

Chris.
Aug 31 '07 #2
Chris,

The device a networked logic controller. There is no practical method
available for displaying or otherwise retrieving it's current IP
address. It does not support DHCP - I assume for the same reason that it
cannot tell you what it is using so it would be pointless. The device
may not have an address set (as supplied), or may be on another IP
subnet, or you may just not know its IP address.

Therefore, until you have set the device to an explicit IP address that
you know of, you have no way of communicating with it on the network.

So, here are the instructions from the manufacturer to assign a
temporary IP address to the device (works until the device is rebooted)

1) Create a static ARP entry linking its MAC address to the IP address
you want to give it. e.g.:

arp -s 192.168.1.100 00-02-20-a0-b4-cd

2) Attempt to telnet to this IP address on TCP port 1. Note that this is
expected to fail, it is just a check measure. e.g.:

telnet 192.168.1.100 1

3) Access the device's web interface on the chosen IP address and
explicitly set its IP address, etc. e.g.:

http://192.168.1.100
This process in not difficult or problematic, but it is very manual. I
would like to write a small utility where I can simply enter the MAC
address and desired IP address and click "Set". Both as a useful tool,
and to learn networking from a C# point of view.

Does that help? Thanks for your interest.

Regards,
Nicolas

*** Sent via Developersdex http://www.developersdex.com ***
Aug 31 '07 #3
Nicolas Noakes wrote:
Chris,

The device a networked logic controller. There is no practical method
available for displaying or otherwise retrieving it's current IP
address. It does not support DHCP - I assume for the same reason that it
cannot tell you what it is using so it would be pointless. The device
may not have an address set (as supplied), or may be on another IP
subnet, or you may just not know its IP address.

Therefore, until you have set the device to an explicit IP address that
you know of, you have no way of communicating with it on the network.
Understood. I'm surprised that they don't support the loopback interface.

[Snippage of instructions]
This process in not difficult or problematic, but it is very manual. I
would like to write a small utility where I can simply enter the MAC
address and desired IP address and click "Set". Both as a useful tool,
and to learn networking from a C# point of view.

Does that help? Thanks for your interest.
Yes it does. Going back to your OP:
Basically it looks like creating a TCP connection on port 1, based on
MAC address instead of IP address, then a normal TCP connection on
port 80 to do an HTTP POST and set the IP address. The first step may
be a little more involved, since the IP address will have to be
included somewhere.
It is not initiating a TCP connection to a MAC address, as those are on
different layers. All it is doing is emulating the loopback address by
setting a default IP, and hitting it on a specific port as a sort of
"secret knock" to unlocking the web interface to the configuration manager.

All you need to really do is:
- Set the static arp table entry to the IP you've chosen.
- Open a TCP connection to that IP on port 1.
- When that fails (you indicated it wasn't expected to work), ignore the
failure and connect to port 80 using a web browser control.

In your code the only thing involving the MAC would be setting the ARP
table entry, and possibly retrieving the MAC address. It is still a very
separate step from the TCP connection to TCP/1 and initiating a web
browser connection.

My suggestion would be to use localhost as the default address
(127.0.0.1) provided it is not already in use on the device. If not,
pick an unused private IP range (10/8, 192.168/16, or 172/8 - IIRC) and
assign it an IP in those ranges.

Chris.
Aug 31 '07 #4
Chris Shepherd wrote:
Understood. I'm surprised that they don't support the loopback interface.
and
It is not initiating a TCP connection to a MAC address, as those are on
different layers. All it is doing is emulating the loopback address by
setting a default IP, and hitting it on a specific port as a sort of
"secret knock" to unlocking the web interface to the configuration manager.
Perhaps is should have posted in a networking group? I don't follow how
it would help if my device supported the loopback interface. How would
it work it that case? Or rather, how does loopback support in the device
enable me to connect to it from my PC? (These questions are straying
off-topic but I am interested to understand better)
All you need to really do is:
- Set the static arp table entry to the IP you've chosen.
- Open a TCP connection to that IP on port 1.
- When that fails (you indicated it wasn't expected to work), ignore the
failure and connect to port 80 using a web browser control.
Ok, I could basically perform the identical process from code. My only
question is whether there is a method to add the static arp entry from
code, or would I have to do it through a shell command?
My suggestion would be to use localhost as the default address
(127.0.0.1) provided it is not already in use on the device. If not,
pick an unused private IP range (10/8, 192.168/16, or 172/8 - IIRC) and
assign it an IP in those ranges.
Again, my lack of understanding on the loopback interface, but why the
default address of 127.0.0.1? That would mean hijacking my own
localhost, surely? Which may not be nice to someone using my proposed
tool who happens to also have a local web server running on their dev
machine.

Thanks for you interest.

Regards,
Nicolas
Sep 3 '07 #5
Nicolas Noakes wrote:
Chris Shepherd wrote:
>It is not initiating a TCP connection to a MAC address, as those are
on different layers. All it is doing is emulating the loopback address
by setting a default IP, and hitting it on a specific port as a sort
of "secret knock" to unlocking the web interface to the configuration
manager.

Perhaps is should have posted in a networking group? I don't follow how
it would help if my device supported the loopback interface. How would
it work it that case? Or rather, how does loopback support in the device
enable me to connect to it from my PC? (These questions are straying
off-topic but I am interested to understand better)
I think the misunderstanding was all mine. I was picturing the device as
a networked handheld/embedded system that would be locally configured,
not remotely.
>All you need to really do is:
- Set the static arp table entry to the IP you've chosen.
- Open a TCP connection to that IP on port 1.
- When that fails (you indicated it wasn't expected to work), ignore
the failure and connect to port 80 using a web browser control.

Ok, I could basically perform the identical process from code. My only
question is whether there is a method to add the static arp entry from
code, or would I have to do it through a shell command?
A shell command would be simplest, but I would bet that Microsoft has
exposed the required API calls to do it. I've never had to do it, so I
couldn't tell you where to start unfortunately.
>My suggestion would be to use localhost as the default address
(127.0.0.1) provided it is not already in use on the device. If not,
pick an unused private IP range (10/8, 192.168/16, or 172/8 - IIRC)
and assign it an IP in those ranges.

Again, my lack of understanding on the loopback interface, but why the
default address of 127.0.0.1? That would mean hijacking my own
localhost, surely? Which may not be nice to someone using my proposed
tool who happens to also have a local web server running on their dev
machine.
Well, this is where I failed to understand what you meant. For remotely
configuring it, I would definitely use a specific address on your range
(or small range of addresses) in the event that you will be
simultaneously configuring multiple of these devices on the same network.

Chris.
Sep 4 '07 #6
I think the misunderstanding was all mine. I was picturing the device as a
networked handheld/embedded system that would be locally configured, not
remotely.
Fine, that makes your comments much clearer! I want to write a utility to
run on a pc
A shell command would be simplest, but I would bet that Microsoft has
exposed the required API calls to do it. I've never had to do it, so I
couldn't tell you where to start unfortunately.
I'll carry on looking into it, thanks.
Sep 10 '07 #7

This thread has been closed and replies have been disabled. Please start a new discussion.

Similar topics

3
by: Harry | last post by:
Using Oracle 8i enterprise on win 2000 (sp3) Installed the standard configuration & whenever I make a connection it takes about 10 secs. It's running on a P1900 with 1gb Ram so no reason there...
9
by: mcbill20 | last post by:
Hello all. I just installed Oracle 10g developer tools on a machine running XP Pro and Office XP. Before this I had just the Oracle 9 client installed. I the previous configuration, I was able to...
1
by: James Goodman | last post by:
In VB6 I used to set my applications to automatically look for the source DB in the program installation directory. If it wasnt found it was fairly easy to pop a dialog asking the user to specify the...
5
by: Suresh | last post by:
Hi Guys I have Db2 server installed on remote server. i am connecting to that remote server by using VPN. I want to connect that remote DB2 server instance using my local machine DB2...
6
by: felix.citycs | last post by:
Why I cannot do with this code and exception is thrown with "the requested address is not valid in its context" try { IPAddress inputDNS_IP = Dns.Resolve(inputDNS_IP).AddressList; // start...
17
by: John Salerno | last post by:
Let me see if this question even makes sense...I'm reading Core Python Programming and I jumped ahead to the more specific topics like network programming. I plan to follow along with the example...
3
by: dynamo08 | last post by:
Hi, I am new to socket programming, I wrote an ftpclient which connects to an ftp server and downloads a file to the client computer. Now in one client connection I want to download multiple files...
3
Airslash
by: Airslash | last post by:
Hello, I've written my own TCPClient and TCPServer class components to handle traffic over the network between applications. When I test the components locally they work. In the local network...
3
isladogs
by: isladogs | last post by:
The next Access Europe meeting will be on Wednesday 2 August 2023 starting at 18:00 UK time (6PM UTC+1) and finishing at about 19:15 (7.15PM) The start time is equivalent to 19:00 (7PM) in Central...
0
by: erikbower65 | last post by:
Using CodiumAI's pr-agent is simple and powerful. Follow these steps: 1. Install CodiumAI CLI: Ensure Node.js is installed, then run 'npm install -g codiumai' in the terminal. 2. Connect to...
0
by: kcodez | last post by:
As a H5 game development enthusiast, I recently wrote a very interesting little game - Toy Claw ((http://claw.kjeek.com/))。Here I will summarize and share the development experience here, and hope it...
14
DJRhino1175
by: DJRhino1175 | last post by:
When I run this code I get an error, its Run-time error# 424 Object required...This is my first attempt at doing something like this. I test the entire code and it worked until I added this - If...
0
by: Rina0 | last post by:
I am looking for a Python code to find the longest common subsequence of two strings. I found this blog post that describes the length of longest common subsequence problem and provides a solution in...
5
by: DJRhino | last post by:
Private Sub CboDrawingID_BeforeUpdate(Cancel As Integer) If = 310029923 Or 310030138 Or 310030152 Or 310030346 Or 310030348 Or _ 310030356 Or 310030359 Or 310030362 Or...
0
by: lllomh | last post by:
Define the method first this.state = { buttonBackgroundColor: 'green', isBlinking: false, // A new status is added to identify whether the button is blinking or not } autoStart=()=>{
0
by: lllomh | last post by:
How does React native implement an English player?
0
by: Mushico | last post by:
How to calculate date of retirement from date of birth

By using Bytes.com and it's services, you agree to our Privacy Policy and Terms of Use.

To disable or enable advertisements and analytics tracking please visit the manage ads & tracking page.